HDU 1905(Pseudoprime numbers)

来源:互联网 发布:怎样抢注域名 编辑:程序博客网 时间:2024/04/30 14:53

HDU 1905(Pseudoprime numbers)

只要读懂题意就能做了。
题意:判断在数a条件下p是否为Pseudoprime numbers:
题目约束:
a^p == a (mod p),
p不是素数

然后 isprime & 快速幂 判断

#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int maxn = 1000000000;bool is_prime(long long x){    if(x == 3 || x == 2) return true;    else{        for(int i = 2; i * i <= x; i++){            if(x % i == 0) return false;        }        return true;    }}long long quickmod(long long a,long long b,long long m){    long long ans = 1;    while(b)                    //用一个循环从右到左便利b的所有二进制位    {        if(b&1)                 //判断此时b[i]的二进制位是否为1        {            ans = (ans*a)%m;    //乘到结果上,这里a是a^(2^i)%m            b--;                //把该为变0        }        b/=2;        a = a*a%m;    }    return ans;}int main(){    long long a, p;    while(scanf("%I64d%I64d",&p,&a) != EOF && (p && a)){        if(is_prime(p)) printf("no\n");        else{            if(quickmod(a,p,p) == a) printf("yes\n");            else printf("no\n");        }    }    return 0;}
0 0
原创粉丝点击