线性筛模板
来源:互联网 发布:数据挖掘和数据分析 编辑:程序博客网 时间:2024/05/29 16:41
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int N=1000005;int n,m;int p[N],phi[N],u[N],f[N];//f£ºÔ¼Êý¸öÊý bool b[N];void clear(){m=0;memset(b,false,sizeof(b));}void get_p(){clear();for (int i=2;i<=n;i++){if (!b[i]) p[++m]=i;for (int j=1;j<=m&&p[j]*i<=n;j++) {b[i*p[j]]=true;if (i%p[j]==0) break;}}}void get_phi(){clear();phi[1]=1;for (int i=2;i<=n;i++){if (!b[i]){p[++m]=i;phi[i]=i-1;}for (int j=1;j<=m&&p[j]*i<=n;j++){b[i*p[j]]=true;if (i%p[j]) phi[i*p[j]]=phi[i]*phi[p[j]];else {phi[i*p[j]]=phi[i]*p[j];break;}}}}void get_u(){clear();u[1]=1;for (int i=2;i<=n;i++){if (!b[i]){p[++m]=i;u[i]=-1;}for (int j=1;j<=m&&p[j]*i<=n;j++){b[i*p[j]]=true;if (i%p[j]) u[i*p[j]]=-u[i];else {u[i*p[j]]=0;break;}}}}void get_f(){clear();f[1]=1;for (int i=2;i<=n;i++){if (!b[i]){f[i]=2;p[++m]=i;}for (int j=1;j<=m&&p[j]*i<=n;j++){b[i*p[j]]=true;if (i%p[j]) f[i*p[j]]=f[i]*f[p[j]];else {int tmp=i,cnt=2;while (tmp%p[j]==0) tmp=tmp/p[j],cnt++;f[i*p[j]]=f[tmp]*cnt;}}}}int main(){scanf("%d",&n);get_p();for (int i=1;i<=m;i++) printf("%d ",p[i]);printf("\n");get_phi();for (int i=1;i<=n;i++) printf("%d ",phi[i]);printf("\n");get_u();for (int i=1;i<=n;i++) printf("%d ",u[i]);printf("\n");get_f();for (int i=1;i<=n;i++) printf("%d ",f[i]);printf("\n");return 0;}
0 0
- 线性筛素数模板
- 线性筛模板
- 线性筛模板
- 线性筛模板
- 线性素数筛模板
- 【模板】线性筛素数
- [模板]线性筛素数
- 【模板】线性筛素数
- luogu3383 线性筛模板
- 线性筛素数模板
- 线性素数筛法模板
- 线性筛μ的模板
- 线性筛求质数模板
- (模板)线性筛素数
- [模板练习]线性筛素数
- 欧拉线性筛模板
- 线性筛求素数模板
- P3383 【模板】线性筛素数
- sizeof 与strlen
- 齐白石 小诗一篇
- 卷积神经网络CNN
- 2016年终总结
- Python实现简单聊天室
- 线性筛模板
- 一图读懂JVM架构解析
- Java面试总结
- Java for
- android启动照相与录像
- 怎样完全安装centos7
- 217. Contains Duplicate 难度:easy
- android studio 多渠道打包
- Spring学习(一)