本题用循环求出2^x 然后在mod n =1,时间就超出了。
利用数学公式 (m*n)%d=(m%d * n%d)%d,情况节变得很简单
代码如下:
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
#define MAX 25
int main()
{
int n;
while (cin>>n)
{
if((n&1)==0||n==1) //num是偶数不能相等
cout<<"2^? mod "<<n<<" = 1\n";
else
{
int ii=0;
int sum=1;
while(1)
{ //应用公式(m*n)%d=(m%d * n%d)%d
++ii;
int temp = 2%n;
sum = sum*temp;
sum = sum%n;
if(sum==1)
break;
}
cout<<"2^"<<ii<<" mod "<<n<<" = 1\n";
}
}
//cout<<"2^"<<ii<<" mod "<<n<<" = 1\n";
return 0;
}