poj3641Pseudoprime numbers Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 8854Accepte

来源:互联网 发布:mac os 10.13 iso下载 编辑:程序博客网 时间:2024/05/29 01:55
Pseudoprime numbers
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8854 Accepted: 3726

Description

Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). That is, if we raise a to the pth power and divide by p, the remainder is a. Some (but not very many) non-prime values of p, known as base-pseudoprimes, have this property for some a. (And some, known as Carmichael Numbers, are base-a pseudoprimes for all a.)

Given 2 < p ≤ 1000000000 and 1 < a < p, determine whether or not p is a base-a pseudoprime.

Input

Input contains several test cases followed by a line containing "0 0". Each test case consists of a line containing p and a.

Output

For each test case, output "yes" if p is a base-a pseudoprime; otherwise output "no".

Sample Input

3 210 3341 2341 31105 21105 30 0

Sample Output

nonoyesnoyesyes

Source

Waterloo Local Contest, 2007.9.23
#include<stdio.h>#include<string.h>__int64 powermod(__int64 a,__int64 b,__int64 c){__int64 ans=1;a=a%c;while(b){   if(b%2)   ans=ans*a%c;   b/=2;   a=a*a%c;}return ans;}int judge(__int64 a){__int64 i;for(i=2;i*i<=a;i++)if(a%i==0)return 0;return 1;}int main(){__int64 a,p,i,j;while(scanf("%I64d%I64d",&p,&a),p||a){if(judge(p))printf("no\n");else{if(powermod(a,p,p)==a%p)printf("yes\n");elseprintf("no\n");    }}return 0;}

0 0
原创粉丝点击