hdu 1395 2^x mod n = 1【欧拉定理】

hdu 1395 2^x mod n = 1【欧拉定理】

 

【题目大意】

输入n,找到符合方程2^x mod n = 1的最小x

 

【解题思路】

利用欧拉定理判定是否有解,由于欧拉函数得到的解不一定是最小解,所以通过试数的暴力方法解决问题。

 

【提交情况】

Wa若干,因为没明白欧拉函数得到的解不一定是最小解。

Tle若干,没考虑到输入时1的特殊情况,导致去掉2的倍数即偶数后,仍无解,进入死循环。

 

【AC的代码】

[code]

#include <iostream>

#include <cstdio>

using namespace std;

 

int main()

{

    long n,ans,i,two,x;

    while(scanf("%ld",&n)!=EOF)

    {

        if(n%2&&n>1)

        {

            two=1;

            for(x=1;;x++)

            {

                two=two*2%n;

                if(two==1) break;

            }

            printf("2^%ld mod %ld = 1\n",x,n);

        }

        else printf("2^? mod %ld = 1\n",n);

    }

    return 0;

}

[/code]

posted on 2010-03-05 10:25  liugoodness  阅读(131)  评论(0)    收藏  举报

导航