题意是求一个最小的正整数x, 令 2^x%n = 1。这里显然当n=1或者为偶数时是无解的,即输出-1。而当n为奇数时则可以根据欧拉函数来求解。即当为奇数的时候必有解。一开始还想各种操作,结果暴力可以直接过。。。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
long long n;
while(cin>>n)
{
if(n%2 == 0 || n==1)
printf("2^? mod %lld = 1\n",n);
else
{
long long ans = 1, t=2;
while(t%n != 1)
{
t = (t*2) % n;
ans++;
}
printf("2^%lld mod %lld = 1\n",ans,n);
}
}
}