poj1284Primitive Roots 欧拉函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1284Primitive Roots 欧拉函数相关的知识,希望对你有一定的参考价值。
题目描述:
题意:
定义原根:对于一个整数x,0<x<p,是一个mod p下的原根,当且仅当集合{ (xi mod p) | 1 <= i <= p-1 } 等于{ 1, ..., p-1 }.给定p,询问有多少个满足定义的原根。
这里有一个定理:如果p有原根,则它恰有φ(φ(p))个不同的原根
证明不懂就算了,我也不懂啊TAT
证明如下
题目中说m是奇素数,所以φ(p)=p-1,故ans=φ(p-1)。
代码如下:
1 #include<cstdio> 2 #include<cstring> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 #include<cmath> 7 using namespace std; 8 9 int phi(int x) 10 { 11 int xx=x,ans=x; 12 for(int i=2;i<=x;i++) 13 { 14 if(xx==1) break; 15 if(xx%i!=0) continue; 16 while(xx%i==0) xx/=i; 17 ans=ans/i*(i-1); 18 } 19 return ans; 20 } 21 22 int main() 23 { 24 int a; 25 while(scanf("%d",&a)!=EOF) 26 { 27 28 int ans=phi(a-1); 29 printf("%d\n",ans); 30 } 31 return 0; 32 }
2016-02-05 16:12:25
以上是关于poj1284Primitive Roots 欧拉函数的主要内容,如果未能解决你的问题,请参考以下文章