2^x mod n = 1

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 }
View Code
转载请备注:
**************************************
* 作者: Wurq
* 博客: https://www.cnblogs.com/Wurq/
* Gitee: https://gitee.com/wurq
**************************************
原文地址:https://www.cnblogs.com/Wurq/p/3750235.html