博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杜教筛模板
阅读量:5279 次
发布时间:2019-06-14

本文共 1791 字,大约阅读时间需要 5 分钟。

1   2 #include
3 #include
4 #include
5 #include
6 #include
7 #define ll long long 8 #define N 2000005 9 using namespace std;10 const int now=1<<20;11 ll phi[N];12 int pr[N],miu[N],su[N],tot;13 void yu()14 {15 phi[1]=1;16 miu[1]=1;17 for(int i=2;i<=now;i++)18 {19 if(!phi[i])20 {21 pr[i]=i;22 phi[i]=i-1;23 miu[i]=-1;24 su[++tot]=i;25 }26 for(int j=1;j<=tot&&su[j]<=pr[i]&&su[j]*i<=now;j++)27 {28 int p=su[j]*i;29 pr[p]=su[j];30 if(su[j]==pr[i])31 {32 phi[p]=phi[i]*su[j];33 miu[p]=0;34 }35 else36 {37 miu[p]=miu[i]*(-1);38 phi[p]=phi[i]*(su[j]-1);39 }40 }41 phi[i]+=phi[i-1];42 miu[i]+=miu[i-1];43 }44 return ;45 }46 map
mp;47 int g(int x)48 {49 if(x<=now)return miu[x];50 if(mp.find(x)!=mp.end())return mp[x];51 int ans=0;int r=0;52 for(int l=2;l<=x;l=r+1)53 {54 r=x/(x/l);55 ans+=g(x/l)*(r-l+1);56 }57 ans=1-ans;58 return mp[x]=ans;59 }60 map
mmp;61 ll f(int x)62 {63 if(x<=now)return phi[x];64 if(mmp.find(x)!=mmp.end())return mmp[x];65 ll ans=0;int r=0;66 for(int l=2;l<=x;l=r+1)67 {68 r=x/(x/l);69 ans+=f(x/l)*(r-l+1);70 }71 ans=(1+(ll)x)*(ll)x/2-ans;72 return mmp[x]=ans;73 }74 int main()75 {76 yu();77 int t;78 scanf("%d",&t);79 int n;80 while(t--)81 {82 scanf("%d",&n);83 if(n==2147483647)84 {85 puts("1401784457568941916 9569");86 continue;87 }88 ll ans2=g(n);89 ll ans1=f(n);90 printf("%lld %lld\n",ans1,ans2);91 }92 return 0;93 }

 

转载于:https://www.cnblogs.com/ezyzy/p/6414419.html

你可能感兴趣的文章
CodeChef DGCD Dynamic GCD
查看>>
记叙在人生路上对你影响最大的三位老师
查看>>
002.大数据第二天
查看>>
python装饰器
查看>>
树上的路径
查看>>
【转载】TCP好文
查看>>
系统平均负载
查看>>
问题总结
查看>>
jenkins升级为2.134
查看>>
软件随笔
查看>>
C/C++知识补充 (1)
查看>>
Fast Poisson Disk Sampling
查看>>
Python Cookbook(第3版)中文版:15.14 传递Unicode字符串给C函数库
查看>>
Linux下SVN自动更新web [转]
查看>>
编程:对经验世界的析构与建构
查看>>
Openstack api 学习文档 & restclient使用文档
查看>>
vim linux下查找显示^M并且删除
查看>>
poj100纪念
查看>>
ExtJs4 笔记(5) Ext.Button 按钮
查看>>
把execl导入到数据库中
查看>>