[莫比乌斯反演 约数个数] BZOJ 3994 [SDOI2015]约数个数和
2016-07-08 21:19
507 查看
重要结论:d(nm)=sigma i|n sigma j|m [gcd(i,j)==1]
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #define P 20101009 using namespace std; typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++; } inline void read(ll &x){ char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } inline int write(ll x,char c) { if (x==0) return putchar('0'),putchar(c),0; if (x<0) putchar('-'),x=-x; char s[50]={0},len=0; while (x) s[++len]=x%10+'0',x/=10; for (int i=len;i;i--) putchar(s[i]); putchar(c); } const int maxn=50000; int vst[maxn+5],prime[maxn+5],num=0; int e[maxn+5]; ll f[maxn+5]; int mobius[maxn+5]; int sum[maxn+5]; inline void Pre() { mobius[1]=1; f[1]=1; for (int i=2;i<=maxn;i++) { if (!vst[i]) { mobius[i]=-1,prime[++num]=i; f[i]=2; e[i]=1; } for (int j=1;j<=num && prime[j]*i<=maxn;j++) { vst[i*prime[j]]=1; if (i%prime[j]==0) { mobius[i*prime[j]]=0; f[i*prime[j]]=f[i]/(e[i]+1)*(e[i]+2); e[i*prime[j]]=e[i]+1; break; } else { mobius[i*prime[j]]=-mobius[i]; f[i*prime[j]]=f[i]*f[prime[j]]; e[i*prime[j]]=1; } } } for (int i=1;i<=maxn;i++) f[i]+=f[i-1], sum[i]=sum[i-1]+mobius[i]; } ll n,m; ll ans; int main() { ll Q; Pre(); read(Q); while (Q--) { read(n); read(m); if (n>m) swap(n,m); ans=0; for (ll j,i=1;i<=n;i=j+1) { j=min(n/(n/i),m/(m/i)); ans+=(ll)(sum[j]-sum[i-1])*f[n/i]*f[m/i]; } write(ans,'\n'); } return 0; }
相关文章推荐
- the field dbms must be defined
- CardView 卡片布局的使用
- pull下来的项目添加了忽略文件(.gitignore文件)
- C标准I/O建立一个文件仓库
- Navicat for SQL使用注意(设置默认字符集,外键保存不了)
- 图论总结
- 225. Implement Stack using Queues
- 覆盖静态方法与非静态方法的区别
- java通过kettle的API调用已经创建好的转换(transformation)或任务(job)
- UVa 116 Unidirectional TSP
- python读取excel文件—xlrd
- 单链表常见操作
- sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询
- day06_反射02
- fifo.c
- 【Hibernate 3】一对一映射配置
- 声音
- php中将12567890装化为1,234,567,890
- springMVC 含时间类型的数据处理 405 错误
- fifo.h