题目:给出一个正整数n,问是否存在x,满足条件2^x mod n=1,如果存在,求出x的最小值。
分析:1、若给出的n是1,则肯定不存在这样的x;
2、若给出的是偶数,2的次幂取余一个偶数得到的肯定是给偶数,所以也找不到;
3、若给出的是奇数,其个位的数字无非是3、5、7、9,而2的次幂的个位为2、4、6、8,分别-1为1、3、5、7,即奇数的倍数都能找到相对的,则2的次幂取余每个奇数都会找 到一个合适的幂数满足题意。
代码:
#include <stdio.h>
int main(){ int n ; while(scanf("%d",&n)!=EOF) { if(n==1 || n%2==0) { printf("2^? mod %d = 1\n",n); } else { int j = 1, mi=2; while(1) { mi %= n ; //让min等于min取余n的余数,因为这个数取余n是否得1与商以无关,接下来只看得到的余数即可。 if(mi == 1) { printf("2^%d mod %d = 1\n",j,n) ; break ; } mi *= 2 ; j++ ; } } } return 0 ;}