●BZOJ 3309 DZY Loves Math
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=3309
题解:
莫比乌斯反演,线筛
化一化式子:
f(x)表示x的质因子分解中的最大幂指数
$\sum_{i=1}^n \sum_{j=1}^m f(gcd(i,j))$
$\quad\quad=\sum_{g=1}^{n}f(g)\sum_{d=1}^{\lfloor \frac{n}{g} \rfloor} \mu(d)\lfloor \frac{n}{gd} \rfloor\lfloor \frac{m}{gd} \rfloor$
$\quad\quad=\sum_{D=gd=1}^{n}(\lfloor \frac{n}{D} \rfloor\lfloor \frac{m}{D} \rfloor)\sum_{g|D} f(g)u(\frac{D}{g})$
令 $w[D]=\sum_{g|D} f(g)u(\frac{D}{g})$
然后如果能够预处理出w[D],那么这个题的每个询问就可以在$O(\sqrt N)$的复杂度内解决。
虽然w[D]不是积性函数,但仍可以在线筛时求出,详见BZOJ 3309: DZY Loves Math [莫比乌斯反演 线性筛]。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 10000007
using namespace std;
int g[MAXN];
void Sieve(){
static bool np[MAXN];
static int prime[MAXN],idx[MAXN],hav[MAXN],pnt;
for(int i=2,tmp,d;i<=10000000;i++){
if(!np[i]) prime[++pnt]=i,hav[i]=1,idx[i]=1,g[i]=1;
for(int j=1;j<=pnt&&i<=10000000/prime[j];j++){
np[i*prime[j]]=1; hav[i*prime[j]]=hav[i]+(i%prime[j]!=0); d=1; tmp=i; while(tmp%prime[j]==0) d++,tmp/=prime[j];
if(idx[tmp]==d||tmp==1) idx[i*prime[j]]=d;
if(tmp==1) g[i*prime[j]]=1;
else if(idx[i*prime[j]]) g[i*prime[j]]=-1*(hav[i*prime[j]]&1?-1:1); if(i%prime[j]==0) break;
}
}
for(int i=1;i<=10000000;i++) g[i]+=g[i-1];
}
int main(){
Sieve();
int Case,n,m,mini; long long ans;
scanf("%d",&Case);
while(Case--){
scanf("%d%d",&n,&m);
ans=0; mini=min(n,m);
for(int D=1,last;D<=mini;D=last+1){
last=min(n/(n/D),m/(m/D));
ans+=1ll*(g[last]-g[D-1])*(n/D)*(m/D);
}
printf("%lld\n",ans);
}
return 0;
}
●BZOJ 3309 DZY Loves Math的更多相关文章
- BZOJ 3309: DZY Loves Math
3309: DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 761 Solved: 401[Submit][Status ...
- bzoj 3309 DZY Loves Math 莫比乌斯反演
DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1303 Solved: 819[Submit][Status][Dis ...
- bzoj 3309 DZY Loves Math——反演+线性筛
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3309 像这种数据范围,一般是线性预处理,每个询问 sqrt (数论分块)做. 先反演一番.然 ...
- bzoj 3309 DZY Loves Math —— 莫比乌斯反演+数论分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3309 凭着上课所讲和与 Narh 讨论推出式子来: 竟然是第一次写数论分块!所以迷惑了半天: ...
- BZOJ 3309: DZY Loves Math [莫比乌斯反演 线性筛]
题意:\(f(n)\)为n的质因子分解中的最大幂指数,求\(\sum_{i=1}^n \sum_{j=1}^m f(gcd(i,j))\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d| ...
- BZOJ 3309 DZY Loves Math ——莫比乌斯反演
枚举$d=gcd(i,j)$ 然后大力反演 ——来自Popoqqq的博客. 然后大力讨论后面的函数的意义即可. http://blog.csdn.net/popoqqq/article/details ...
- BZOJ 3309: DZY Loves Math 莫比乌斯反演+打表
有一个神奇的技巧——打表 code: #include <bits/stdc++.h> #define N 10000007 #define ll long long #define se ...
- 【BZOJ】3309: DZY Loves Math 莫比乌斯反演优化
3309: DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007) ...
- BZOJ 3561 DZY Loves Math VI
BZOJ 3561 DZY Loves Math VI 求\(\sum_{i=1}^{n}\sum_{j=1}^{m}\text{lcm}(i,j)^{\gcd(i,j)}\),钦定\(n\leq m ...
随机推荐
- 团队作业7——第二次项目冲刺(Beta版本12.06)
项目每个成员的进展.存在问题.接下来两天的安排. 已完成的内容:队员每个人提出对接下来需要做的事情的看法和意见,将需要做的任务更新到了leangoo中进行管理,产品完成了界面优化的设计,测试复现了之前 ...
- C语言--第四周作业
一.题目7-1 计算分段函数[1] 1.代码 #include <stdio.h> int main () { float x,result; scanf("%f",& ...
- Session的过期时间如何计算?
在生成session的时候,会设置一个session过期时间.session的过期时间并不是从生成session对象开始计算,超过过期时间,session就失效了. 而是每当一个浏览器请求,sessi ...
- [NOI2015]软件包管理器
4621 [NOI2015]软件包管理器 题目等级 : 钻石 Diamond 题目描述 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过 ...
- border 三角形 有边框的 东西南北的 气泡三角形
链接地址:http://www.cnblogs.com/blosaa/p/3823695.html
- WebApi一个控制器中定义多个Get方法。
问题:怎样解决一个ApiController中定义多个Get方法或者Post方法? 答:要想实现一个ApiController中定义多个Get方法或者Post方法,则需要在WebApiConfig类中 ...
- JAVA_SE基础——72.自定义线程
进程 : 正在执行的程序称作为一个进程. 进程负责了内存空间的划分. 问题: windows号称是多任务的操作系统,那么windows是同时运行多个应用程序吗?从宏观的角度: windows确 ...
- C语言学习(二)
今天在程序员面试题中,碰到一个有意思的题目:数组a[N],存放了1至N-1个数,其中某个数重复一次,现在要求找出重复的数字且程序时间复杂度必须为O(N).乍一看,如果不计时间复杂度和空间复杂度程序比较 ...
- ELK学习总结(1-2)安装ElasticSearch
1.下载安装 Centos6.4 jdk1.8.20以上 elasticsearch::https://www.elastic.co/downloads/elasticsearch ...
- sort()与sorted()区分开
列表的排序方法是sort 可用list.sort() sorted()是BIF不能用list.sorted() 引发的异常AttributeError: 'list' object has no at ...