Poj 1284 Primitive Roots

来源:互联网 发布:金山数据恢复 收费 编辑:程序博客网 时间:2024/05/29 13:44

题目链接:点击打开链接

题目的意思就是给一个odd prime,要你求其原根个数。

根据原根个数定理:

如果有一个数p有原根的话,那么p的原根个数为Euler(Euler(p));

对于该题目:由于给定是一个奇素数,所以Euler(p)=p-1;

所以answer=Euler(p-1)。

代码:

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define LL long longLL Euler1(LL n){    LL ans=n;    for(LL i=2;i<=sqrt(n);i++){        if(n%i==0){            while(n%i==0) n=n/i;            ans=ans/i*(i-1);        }    }    if(n>1) ans=ans/n*(n-1);    return ans;}int main(){    LL n;    while(~scanf("%lld",&n)){        printf("%lld\n",Euler1(n));    }    return 0;} 

不能够系统的学习,那就慢慢的积累吧。!!

0 0
原创粉丝点击