Time Limit: 5000 ms Memory Limit: 512 MB

  

Description

  

​   对于正整数n,定义f(n)为n所含质因子的最大幂指数。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。

​   给定正整数a,b,求\(\sum\limits _{i=1}^a \sum\limits_{j=1}^b f(gcd(i,j))\)。

  

Input

  

  第一行一个数T,表示询问数。

  接下来T行,每行两个数a,b,表示一个询问。

  

Output

  

​   对于每一个询问,输出一行一个非负整数作为回答。

  

Sample Input

  

​   4

​   7558588 9653114

​   6514903 4451211

​   7425644 1189442

  ​ 6335198 4957

  

Sample Output

  

​   35793453939901

​   14225956593420

​   4332838845846

  ​ 15400094813

  

HINT

  

【数据规模】

  T<=10000

​  1<=a,b<=10^7

  

  

  

Solution

  

  这里用\(n\)和\(m\)代表题目中的\(a\)和\(b\)。-_-

\[\begin{aligned}
ans&=\sum_{i=1}^n\sum_{j=1}^mf(gcd(i,j))\\
&=\sum_{x=1}^{min(n,m)}f(x)*sum(x) &sum(x)为x=gcd(i,j)的(i,j)对数,满足i和j在n和m范围内\\
&=\sum_{x=1}^{min(n,m)}f(x)\sum_{x|d}\mu(\frac dx)\lfloor\frac nd\rfloor\lfloor\frac md\rfloor\\
&=\sum_{x=1}^{min(n,m)}f(x)\sum_{k=1}^{\lfloor min(n,m)/x\rfloor}\mu(k)\lfloor\frac n{kx}\rfloor\lfloor\frac m{kx}\rfloor\\
&=\sum_{T=1}^{min(n,m)}\lfloor\frac nT\rfloor\lfloor\frac mT\rfloor\sum_{d|T}f(d)\mu(\frac Td)\\
&=\sum_{T=1}^{min(n,m)}\lfloor\frac nT\rfloor\lfloor\frac mT\rfloor g(T) &令g(x)=\sum\limits_{d|x}f(d)\mu(\frac xd)
\end{aligned}
\]

  

​ 现在关键是求解\(g\)函数,完事后求\(g\)的前缀和,一样根号分段求\(ans\).

  

​ (1)当\(x\)为质数时,\(g(x)=f(1)\mu(x)+f(x)\mu(1)=0+1=1\)

  

  

  

  ​ (2)当筛到\(x=p*i\)时,分解质因数\(x=p_1^{q_1}p_2^{q_2}...p_k^{q_k}\),\(\frac xd=p_1^{a_1}p_2^{a_2}...p_k^{a_k}\),显然\(或a_i=0或1\),才能对\(g(x)\)有贡献,不然\(\mu({\frac xd})=0\). 现在只考虑满足\(或a_i=0或1\)的因数\(d\).

\[\begin{aligned}
g(x)&=\sum_{d|x}f(d)\mu(\frac xd)\\
&=f(x)\sum_{d|x且f(d)=f(x)} \mu(\frac xd)+(f(x)-1)\sum_{d|x且f(d)\ne f(x)}\mu(\frac xd)\\
&=-\sum_{d|x且f(d)\ne f(x)}\mu(\frac xd)
\end{aligned}
\]

  ​ 要满足\(f(d)\ne f(x)\),所有\(q_i=f(x)\)的\(p_i\)的指数在\(d\)中都要变成\(q_i-1\).

  

  1° 如果所有\(q_i=f(x)\),那么\(a_i\)全部取1,则\(g(x)=-\mu(p_1p_2...p_k)=-(-1)^k=(-1)^{k+1}\),这里有个特殊情况,如果\(i\)为\(p\)的完全平方数,即\(i=p^{a_i}\),(这里的\(a\)是最后提到的那个\(a\)数组),那么\(x=p^{a_i+1}\),则\(g(x)=-\mu(p)=1\)

  

  2° 否则若存在\(q_i\ne f(x)\),\(g(x)=0\).

  

​   记\(A=\{i|q_i=f(x)\},B=\{i|q_i\ne f(x)\}\).

  

​   对于\(A\)中的\(i\),\(a_i\)必须取1,而\(B\)中的\(a_i\)取0或1都可以,那么

\[\begin{aligned}
g(x)&=-\sum\mu((\prod_{i\in A}p_i)*(\prod_{j\in B}(p_j或1))\\
&=-\mu(\prod_{i\in A}p_i)\sum\mu(\prod_{j\in B}(p_j或1))\\
&=-(-1)^{|A|}*0&\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \prod_{i\in B}(p_j或1)有奇数个质数和偶数个质数的情况次数一样,正负抵消\\
&=0 &大快人心
\end{aligned}
\]

​  

  

​   线性筛时,维护一个\(a_i\)表示\(i\)的最小质因子\(p_{min}\)的指数,\(b_i\)表示\(p_{min}^{a_i}\).

  

​   由于每次循环的\(p\)都是\(x\)的最小质因子,故每次更新时比较\(a_i\)和\(a_x\)是否相同,如果相同就更新,如果不相同直接等于0,这样就可以保证每一个数\(x\)如果存在质因子指数不同的情况,\(g(x)\)立即等于0. 详情见代码.

  

  

  

#include <cstdio>
using namespace std;
typedef long long ll;
const int N=1e7+1;
int vis[N],lis[N],cnt;
ll g[N],a[N],b[N];
inline void swap(int &x,int &y){int t=x;x=y;y=t;}
inline int min(int x,int y){return x<y?x:y;}
void init(){
for(int i=2;i<N;i++){
if(!vis[i]){
lis[++cnt]=i;
a[i]=1; b[i]=i;
g[i]=1;
}
for(int j=1;j<=cnt&&i*lis[j]<N;j++){
int x=i*lis[j],p=lis[j];
vis[x]=1;
if(i%p==0){
//d是i去除p后的数,i=d*p^ai, x=d*p^(ai+1) 故ax=ai+1,bx相应乘上p
a[x]=a[i]+1;
b[x]=b[i]*p;
int d=i/b[i];
if(d==1) g[x]=1; //特殊情况(边界情况)i是p的幂
else g[x]=(a[x]==a[d])?-g[d]:0; //若x满足所有指数相同,g(x)=g(d)乘上-1,否则为0
break;
}
a[x]=1; b[x]=p;
g[x]=a[i]==1?-g[i]:0; //原理同上
}
}
for(int i=2;i<N;i++) g[i]+=g[i-1];
}
int main(){
freopen("input.in","r",stdin);
init();
int T,a,b;
ll ans;
scanf("%d",&T);
while(T--){
scanf("%d%d",&a,&b);
if(a>b) swap(a,b);
ans=0;
for(int i=1,j;i<=a;i=j+1){
j=min(a/(a/i),b/(b/i));
ans+=1LL*(a/i)*(b/i)*(g[j]-g[i-1]);
}
printf("%lld\n",ans);
}
return 0;
}

【BZOJ3309】DZY Loves Math的更多相关文章

  1. 【BZOJ3309】DZY Loves Math(莫比乌斯反演)

    [BZOJ3309]DZY Loves Math(莫比乌斯反演) 题面 求 \[\sum_{i=1}^a\sum_{j=1}^bf(gcd(a,b))\] 其中,\(f(x)\)表示\(x\)分解质因 ...

  2. 【BZOJ3309】DZY Loves Math 解题报告

    [BZOJ3309]DZY Loves Math Description 对于正整数\(n\),定义\(f(n)\)为\(n\)所含质因子的最大幂指数.例如\(f(1960)=f(2^3×5^1×7^ ...

  3. 【BZOJ3309】DZY Loves Math 莫比乌斯反演+线性筛(好题)

    [BZOJ3309]DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10 ...

  4. 【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛

    Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b, ...

  5. 【BZOJ3309】DZY Loves Math(线性筛)

    题目: BZOJ 3309 分析: 首先,经过一番非常套路的莫比乌斯反演(实在懒得写了),我们得到: \[\sum_{T=1}^n \sum_{d|T}f(d)\mu(\frac{T}{d})\lfl ...

  6. 【BZOJ3309】DZY Loves Math - 莫比乌斯反演

    题意: 对于正整数n,定义$f(n)$为$n$所含质因子的最大幂指数.例如$f(1960)=f(2^3 * 5^1 * 7^2)=3$,$f(10007)=1$,$f(1)=0$. 给定正整数$a,b ...

  7. 【BZOJ3561】DZY Loves Math VI (数论)

    [BZOJ3561]DZY Loves Math VI (数论) 题面 BZOJ 题解 \[\begin{aligned} ans&=\sum_{i=1}^n\sum_{j=1}^m\sum_ ...

  8. 【BZOJ3512】DZY Loves Math IV(杜教筛)

    [BZOJ3512]DZY Loves Math IV(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\] 其中\(n\le 10^5,m\l ...

  9. 【bzoj3560】DZY Loves Math V 欧拉函数

    题目描述 给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). 输入 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. 输出 仅一行答案. 样例输入 3 ...

随机推荐

  1. List迭代过滤操作注意点

    今天在写一段很简单的代码,本来以为肯定没什么问题,然后直接跑的时候,吆,简单的一个List的操作报错了.仔细一看代码,确实有问题,但是一般真的是如果稍微不小心就会犯下面这种愚蠢的操作. 这里我把代码贴 ...

  2. android 监听返回键

    android监听返回键 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE ...

  3. 康盛(discuz )牛逼的PHP加解密算法函数

    1.前言 康盛的 authcode 函数很牛叉,是一个具有有效期的加解密函数,同一个字符每次加密所产生的结果都是不一致的,并且可以自定义设置过期时间. 设计原理:authcode 是使用异或运算进行加 ...

  4. linux 文件名称前后缀操作函数----取目录函数dir、取文件名称函数notdir、取后缀函数suffix、取前缀basename、加后缀函数addsuffix、加前缀addprefix、连接函数join

    1.1       文件名操作函数 下面我们要介绍的函数主要是处理文件名的.每个函数的参数字符串都会被当做一个或是一系列的文件名来对待. 1.1.1        取目录函数dir $(dir < ...

  5. BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]

    1042: [HAOI2008]硬币购物 题意:4种硬币.面值分别为c1,c2,c3,c4.1000次询问每种硬币di个,凑出\(s\le 10^5\)的方案数 完全背包方案数? 询问太多了 看了题解 ...

  6. BZOJ 2738: 矩阵乘法 [整体二分]

    给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 愚蠢的名字...... 整体二分,影响因子就是矩阵里的数 把$\le mid$的矩阵元素加到二维树状数组里然后询问分成两组就行 ...

  7. 51Nod 欢乐手速场1 B 序列变换[容斥原理 莫比乌斯函数]

    序列变换 alpq654321 (命题人)   基准时间限制:1 秒 空间限制:131072 KB 分值: 40 lyk有两序列a和b. lyk想知道存在多少对x,y,满足以下两个条件. 1:gcd( ...

  8. 解决xshell评估期已过的问题

    问题:时间长没有打开xshell,今天突然打开提示评估期已过,如下图所示: 点击采购会弹出购买的界面,(对于我们这些程序屌怎么会花899购买一款软件)点击取消就会退出. 解决方法: 卸载这个要收费的版 ...

  9. TensorFlow实战之Softmax Regression识别手写数字

         关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...

  10. ★Linux命令行操作技巧(作为服务器端)

    1.统计某个目录下总共有多少个文件(递归统计所有子目录)ls -lR|grep "^-"|wc -l