HDU 1395

题意是求一个最小的正整数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);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40433083/article/details/84778614