您的位置:首页 > 其它

【HDOJ】1395 -> 2^x mod n = 1

2013-08-18 21:33 267 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1395

心得:

       
欧拉定理: a^phi(m) ≡1(mod m),phi(m)为欧拉函数,表示比m小且与m互质的正整数个数,当m为质数时,phi(m)=m-1。即为费马定理。本题中:1、当n为1时无解。
2、当n为偶数时,2^x也为偶数,所以2^x不可能和n关于奇数1同余。 3、当n为素数时,根据费马定理x=n-1,但不一定最小。此时暴力即可。 

        小技巧:x*2%n先取模再乘2可以加快运算速度,即(x%2)*2。

代码:

#include <stdio.h>
int main(){
__int64 n,i,x;
while(~scanf("%I64d",&n)){
if(n==1 || n%2==0) printf("2^? mod %I64d = 1\n",n);
else{
x=1;i=0;
while(i++,1){
x=(x%n)*2;
if(x%n==1) break;
}
printf("2^%I64d mod %I64d = 1\n",i,n);
}
}
return 0;
}

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