SPOJ - PGCD Primes in GCD Table - 莫比乌斯反演
2016-01-27 14:32
155 查看
题目描述
1’.枚举prime
2’.不枚举prime,进一步化简合式
(跟BZOJ(本校) 2525 公约数 - 莫比乌斯反演 这道题差不多)
见这篇blog的方法二的sum()的推导和其中链接博客的第二篇
代码来源by Liu Junhao
1’.枚举prime
#include<cstdio> #include<algorithm> using namespace std; #define MAXN 10000000 #define MAXP 800000 int prime[MAXP+10],cntpr,mu[MAXN+10],a,b,sum[MAXN+10]; bool isprime[MAXN+10]; void CalMobius(int n) { mu[1]=1; for(int i=2;i<=n;i++){ if(!isprime[i]){ prime[++cntpr]=i; mu[i]=-1; } for(int j=1;prime[j]*i<=n&&j<=cntpr;j++){ isprime[prime[j]*i]=true; if(i%prime[j]==0){ mu[prime[j]*i]=0; break; } mu[prime[j]*i]=-mu[i]; } } for(int i=1;i<=n;i++) sum[i]=mu[i]+sum[i-1]; } long long Cal(int n,int m) { long long ret=0; int side=min(n,m),last; for(int i=1;i<=side;i=last+1){ last=min(n/(n/i),m/(m/i)); ret+=1LL*(sum[last]-sum[i-1])*(n/i)*(m/i); } return ret; } int main() { int T; scanf("%d",&T); CalMobius(MAXN); while(T--){ scanf("%d%d",&a,&b); int side=min(a,b); long long ans=0; for(int i=1;prime[i]<=side&&i<=cntpr;i++) ans+=Cal(a/prime[i],b/prime[i]); printf("%lld\n",ans); } }
2’.不枚举prime,进一步化简合式
(跟BZOJ(本校) 2525 公约数 - 莫比乌斯反演 这道题差不多)
见这篇blog的方法二的sum()的推导和其中链接博客的第二篇
代码来源by Liu Junhao
#include<cstdio> #include<algorithm> using namespace std; #define MAXN 10000000 int sum[MAXN+10],mu[MAXN+10],p[MAXN+10],pcnt,m,n,T; long long ans; bool f[MAXN+10]; void Read(int &x){ char c; while(c=getchar(),c!=EOF) if(c>='0'&&c<='9'){ x=c-'0'; while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0'; ungetc(c,stdin); return; } } void prepare(){ int i,j; for(i=2;i<=MAXN;i++){ if(!f[i]) p[++pcnt]=i,mu[i]=-1,sum[i]=1; for(j=1;p[j]*i<=MAXN;j++){ f[p[j]*i]=1; if(i%p[j]==0){ sum[i*p[j]]=mu[i]; mu[i*p[j]]=0; break; } mu[i*p[j]]=-mu[i]; sum[i*p[j]]=mu[i]-sum[i]; } sum[i]+=sum[i-1]; } } void solve(){ int i,last,t=min(m,n); ans=0; for(i=1;i<=t;i=last+1){ last=min(n/(n/i),m/(m/i)); ans+=1ll*(sum[last]-sum[i-1])*(n/i)*(m/i); } } int main() { Read(T); prepare(); while(T--){ Read(n),Read(m); solve(); printf("%lld\n",ans); } }
相关文章推荐
- oracle中,创建其他用户表的对应视图
- iOS 开发 入门:发布应用到App Store 详细教程
- Mysql数据库优化---2.慢查询(一)
- 网络传输数据如何加密
- margin负值的相关应用
- HackerRank "Bike Racer"
- 解决:java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
- 解决:雷柏X1800无线键鼠鼠标键失灵单双键错乱
- 关于c语言结构体内存对齐有感
- 如何在web中实现多文件上传
- discuz 数据库密码修改后 管理后台不能登录问题
- Java基础-数据类型
- 操作系统 /3GB /PAE 参数详解
- Java利用POI生成Excel(.xls和.xlsx)
- Java利用JXL产生Excel(.xls)
- git 命令常用总结
- 解决:联想笔记本用无线上网一会儿就断网,要重启或者重连接才能工作
- 解决:Chrome主页变hao123
- Java绘制图片并实现打印前生成图片文件进行预览
- bzoj3289 Mato的文件管理 莫队算法 树状数组