您的位置:首页 > 其它

Poj 1284 Primitive Roots

2014-05-02 20:38 381 查看
题目链接:点击打开链接

题目的意思就是给一个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 long

LL 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;
}


不能够系统的学习,那就慢慢的积累吧。!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: