标签:arp lse ret 题目 分享 ++ get 一个 printf
一个质数原根的个数
结论题
一个数n的原根的个数等于$\varphi(\varphi(n))$
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; const int N=65536+15; int p,tot; int vis[N],prime[N],phi[N]; void get_phi() { phi[1]=1; for (int i=2;i<=N;i++) { if (!vis[i]) { prime[++tot]=i; phi[i]=i-1; } for (int j=1;j<=tot&&prime[j]*i<=N;j++) { vis[prime[j]*i]=1; if (i%prime[j]==0) { phi[i*prime[j]]=phi[i]*prime[j]; break; } else phi[i*prime[j]]=phi[i]*(prime[j]-1); } } } int main() { get_phi(); while (scanf("%d",&p)!=EOF) { printf("%d\n",phi[p-1]); } return 0; }
标签:arp lse ret 题目 分享 ++ get 一个 printf
原文地址:https://www.cnblogs.com/xxzh/p/9646470.html