hdu 1359
2^x mod n = 1
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.
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
分析:
当n==1 || n为偶数时 ,2^x mod n != 1 ; 故 n>1 且 n 为奇数时 ,从2开始遍历能找到x ,使等式成立。
2^x % n = (2^a %n) *(2^b%n)%n; 其中 x= a+b.
1 #include<iostream> 2 #include<stdio.h> 3 #include<string> 4 #include<string.h> 5 #include<map> 6 #include<math.h> 7 8 using namespace std; 9 10 int main() 11 { 12 int n; 13 while(cin>>n) 14 { 15 int mi,tmp; 16 if(n==1 || n%2==0) 17 cout<<"2^? mod "<<n<<" = 1"<<endl; 18 else 19 { 20 mi=1; 21 tmp=2; 22 while(tmp!=1) 23 { 24 tmp=tmp*2%n; 25 mi++; 26 } 27 cout<<"2^"<<mi<<" mod "<<n<<" = 1"<<endl; 28 } 29 30 } 31 32 return 0 ; 33 }