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

来源:互联网 发布:网络维护与故障排除 编辑:程序博客网 时间:2024/04/30 04:14

题目链接: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;}



原创粉丝点击