AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2820

有种方法是枚举质数然后用BZOJ2301来做但是超时了...

具体式子大概张这样:

然后下面一步比较关键,就是将T=p*d带进去

这个时候需要读者自己先手化简一下将ans变成一个与T有关的式子

然后可以再看笔者这个式子

有几个注意的地方,首先T=p*d,所以T的范围是1...n

原式中的n/(p*d)和m/(p*d)就是(n/T)*(m/T)这个好懂,而mu[d]变成mu[T/p]也是很好理解的,注意这个p也是质数

所以这个式子的变形就是这样啦,然后感觉和BZOJ2301有点像了。

[这是2301的图]

唯一区别就是一个是mu[],一个是一大坨东西

于是我们设f(T)=sigma(p|T)mu[T/p]  可以看出这一堆只和T有关。

然后如果能预处理出来f(T)就可以了。

然后有种奥妙重重的做法,枚举每个素数然后去更新这些素数的倍数[然后好像就可以O(n)奥妙重重?因为蒟蒻不会算复杂度,但是这是可以A的]

然后当时宋老师提供了第二种思路,就是分析T的组成。

我们可以假设T=(p1^x1)*(p2^x2)*(p3^x3)...(pk^xk)

然后考虑若xi>=3 那么f(T)=0,因为不管怎么取,就算是除以pi,xi还是>=2的,所以mu[T/p]一定等于0,和也是0

若xi==2 && xj==2也有f(T)=0,理由同上

然后就只有两种情况了

xi==2 && 其他x等于1 ,这时只有取出pi时mu[T/pi]=(-1)^k,其他时候都是0

若 所有xi==1,取出来都等于(-1)^(k-1),答案就是k*(-1)^(k-1)

然后据说你要是线性筛能得到每个数属于哪个范围就可以搞定这道题了。

当时听的时候觉得很兹瓷啊...但是发现我不能实现啊,于是就用唯一分解做了,然后好像最坏是n*log(n)的,然而过了...

所以怎么用线性筛呢...

[那就看聪明的读者您了...]

我的代码:

#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; const int maxn=; int Prime[maxn],cnt;
int f[maxn],nr[maxn],s[maxn];
bool np[maxn],zn[maxn]; inline int in(){
int x=;char ch=getchar();
while(ch>'' || ch<'') ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return x;
} int get_f(int x){
int k=,find=,rec;
while(x>){
if(rec==nr[x]){if(!find) find=true; else return ;}
rec=nr[x],x/=nr[x],k++;
}
if(find){if(k&) return ; else return -;}
else{if(k&) return k; else return -k;}
} void get_prime(){
for(int i=;i<maxn;i++){
if(!np[i]){Prime[++cnt]=i;nr[i]=i;}
for(int j=;j<=cnt && Prime[j]*i<maxn;j++){
np[Prime[j]*i]=true,nr[Prime[j]*i]=Prime[j];
if(i%Prime[j]==){
zn[Prime[j]*i]=true;break;
}
}
}
for(int i=;i<maxn;i++) f[i]=get_f(i),s[i]=s[i-]+f[i];
} long long calcu(int n,int m){
long long sum=;
if(n>m) swap(n,m);
for(int i=,j=;i<=n;i=j+){
j=min(n/(n/i),m/(m/i));
sum+=(long long)(s[j]-s[i-])*(n/i)*(m/i);
}
return sum;
} int main(){
#ifndef ONLINE_JUDGE
freopen("2820.in","r",stdin);
freopen("2820.out","w",stdout);
#endif get_prime(); int n,m,T=in();
while(T--){
n=in(),m=in();
printf("%lld\n",calcu(n,m));
} return ;
}

BZOJ 2820 YY的GCD的更多相关文章

  1. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  2. [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)

    [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...

  3. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

  4. 【刷题】BZOJ 2820 YY的GCD

    Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种傻×必然 ...

  5. Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)

    2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...

  6. bzoj 2820 YY的GCD 莫比乌斯反演

    题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...

  7. bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛

    Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...

  8. BZOJ 2820 YY的GCD(莫比乌斯函数)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2820 题意:给定n,m.求1<=x<=n, 1<=y<=m且Gc ...

  9. bzoj 2820 YY的GCD(莫比乌斯反演)

    Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻× ...

  10. ●BZOJ 2820 YY的GCD

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2820 题解: 莫比乌斯反演 先看看这个题:HDU 1695 GCD(本题简化版) HDU 1 ...

随机推荐

  1. Jquery调用Webservice传递Json数组

    Jquery由于提供的$.ajax强大方法,使得其调用webservice实现异步变得简单起来,可以在页面上传递Json字符串到Webservice中,Webservice方法进行业务处理后,返回Js ...

  2. TFS build dotCover StyleCop

    FS2010 – Customizing the Build Details View – Summary View http://blogs.msdn.com/b/jpricket/archive/ ...

  3. 网页热力图 heatmap js

    HBuilder +js 实现网页热力图 废话不多说,上代码 <!DOCTYPE html> <html> <head> <title>111</ ...

  4. 单个input框上传多个文件操作

    HTML页面: <div class="form-group thumb"> <label class="control-label col-xs-12 ...

  5. Tostring记录,方便自己查看

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

  6. 如何解决android studio 运行时中文乱码的问题

    相信很多朋友都会遇到android studio 在MAC OS中运行的时候中文乱码.而在代码编辑的时候正常.经过几天的不断寻找解决办法,终于解决了 比如: Toast.makeText(MainAc ...

  7. linux kernel 0.11 head

    head的作用 注意:bootsect和setup汇编采用intel的汇编风格,而在head中,此时已经进入32位保护模式,汇编的采用的AT&T的汇编语言,编译器当然也就变成对应的编译和连接器 ...

  8. CentOS6.4上搭建hadoop-2.4.0集群

    公司Commerce Cloud平台上提供申请主机的服务.昨天试了下,申请了3台机器,搭了个hadoop环境.以下是机器的一些配置: emi-centos-6.4-x86_64medium | 6GB ...

  9. arcgis中使用excel中x,y坐标创建点问题

    文件——从x,y中添加,可以显示点的位置 右击图层导出数据时,出现无法绘制图形,生成shapefile文件的情况.经过排除数据发现 当x,y坐标值中出现null等异常值时,会出现上述无法导出的情况.

  10. Postgres Basic Commands for Beginners

    Just sharing what I have learned about postgres recently. Here is a part of basic commands you may n ...