灵异事件!!!
#include <iostream>
#include <climits>
using namespace std;
int cube(int i)
{
int count=0;
int check;
while(i>0)
{
check+=i%2;
count++;
i/=2;
}
if(check==1) return count-1;
else return -1;
}
int main()
{
int number;
while(!cin.eof())
{
cin >> number;
int a,b;
a=b=INT_MAX;
if(number==1)
{
cout << "2^? mod 1 = 1" <<endl;
continue;
}
if(number%2==0)
{
cout << "2^? mod "<< number <<" = 1" <<endl;
continue;
}
else
{
int i;
int temp;
for(i=1;i<INT_MAX;i++)
{
temp=cube(i*number+1);
//cout << temp << "\t"; //灵异行
if(temp>0)
{
cout <<"2^" << temp<< " mod "<<number<<" = 1" << endl;
break;
}
}
if(i==INT_MAX)
cout << "2^? mod "<<number<<" = 1" <<endl;
}
}
return 0;
}
如果把上面的注释行取消注释,则结果正确.比如输入5,输出应为:2^4 mod 5 = 1;
可如果注释掉,输入5后,就是2^? mod 2 = 1了.
高手赐教.