题意:
求最小的x使得 2^x mod n = 1;
思路:
当n为偶数时,显然无解,n为奇数时,gcd(2,n)==1,所以根据欧拉定理a^φ(x)=1(mod x)(gcd(a,p)==1)可以证明其存在性
但无论怎么说都不能改变这是一道暴力题的事实(反正我不知道其他方法)。x从1开始枚举就可以了。
#include<bits/stdc++.h> using namespace std; int main(){ int n,i,k; while(cin>>n){ i=1; k=1; while(1){ if(i>n){ cout<< "2^?"<<" mod "<<n<<" = 1"<<endl; break; } k=(k+k)%n; if(k==1){ cout<< "2^"<<i<<" mod "<<n<<" = 1"<<endl; break; } i++; } } return 0; }