您的位置:首页 > 其它

hdu 1395

2014-07-31 11:24 197 查看
 因为2为偶数,一为奇数,所以n一定是为奇数,才可能。取余相当于减法运算,所以可以确定是奇数;

所以先排除偶数和一,

穷举法进行运算。

1、用下面代码,中间进行求余运算,避免超时

2、用for(i=2;;i=(i%n)*2)//中国求余定理

     m++;//计算次数;

3、费马小定理,a和n互质,a^(n-1)modn==1;a和n互质,这只是证明当n为奇数的时候一定有x满足a^xmodn=1;但是x不一定为n-1;可能为更小一些的数

if(i%n==1)break;

#include<stdio.h>

int main()

{

    int n,i,b;

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

    { b=1;

      if((n%2==0)||(n==1))

      {printf("2^? mod %d = 1\n",n);continue;}

      for(i=1;;i++)

       {

         b*=2;

         b=b%n;//用一次取余,否则数太大,会超时

        if(b==1)

        {printf("2^%d mod %d = 1\n",i,n);break;}

       }               

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: