////////////////////////////////////////////////////////
//2^x mod n = 1
//给出n,算出最小的x满足2^x mod n = 1
//思路:高精度,需要不断地缩小数据的规模。首先,n=1和n=2的倍数时不存在x,
//      其次,每次把2^k nod n的余数乘2,得到是原(2^k)*2的余数,即2^(k+1)
//      的余数。

 


#include<iostream>
using namespace std;

 

int main()
{
    long temp,n,count;
    while(cin>>n)
    {
        if(n==1 || n%2==0)
            cout<<"2^? mod "<<n<<" = 1"<<endl;
        else
        {
            count=1;
            temp=2;
            while(temp!=1)
            {
                temp*=2;
                count++;
                temp%=n;
            }
            cout<<"2^"<<count<<" mod "<<n<<" = 1"<<endl;
        }
    }
    return 0;
}

 

 

posted on 2010-05-12 10:55  VRS  阅读(207)  评论(0)    收藏  举报