2^x mod n = 1
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 59 Accepted Submission(s) : 16
Problem Description
Give a number n, find the minimum x(x>0) that satisfies 2^x mod n = 1.
Input
One positive integer on each line, the value of n.
Output
If the minimum x exists, print a line with 2^x mod n = 1. Print 2^? mod n = 1 otherwise. You should replace x and n with specific numbers.
Sample Input
2 5
Sample Output
2^? mod 2 = 1 2^4 mod 5 = 1
Author
MA, Xiao
Source
ZOJ Monthly, February 2003
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 int i,n,x,sign,sum,N; 7 while(scanf("%d",&n)!=EOF) 8 { 9 sign=0; 10 if(n%2==0||n==1) 11 sign--; 12 else 13 { 14 for(i=1,N=1,sign=0;;i++) 15 { 16 N=(N*2)%n; 17 if(N==1) 18 { 19 x=i; 20 sign++; 21 break; 22 } 23 } 24 25 } 26 if(sign==1) 27 printf("2^%d mod %d = 1 ",x,n); 28 else 29 printf("2^? mod %d = 1 ",n); 30 } 31 }