HDU_1395 2^x mod n = 1
2014-07-31 12:17
399 查看
2^x mod n = 1
[align=left]2014-7-31 12:07[/align][align=left]/*[/align]
此题的精髓在于欧拉定理的运用。欧拉定理是这样的:已知 n,a为正整数,若gcd(a,n)=1 (也就是互质),那么(a^f(n))%n=1 .
[align=left]欧拉定理又是费马小定理的推广,费马小定理是这样的:已知 n,a为正整数,若gcd(a,n)=1 (也就是互质),那么(a^(n-1))%n=1[/align]
[align=left] [/align]
[align=left]再看此题:首先 x>0,所以2^x必定为偶数,也就转化为一个偶数%n=1,若n也为偶数,则此式子是不可能余1的,并且! n=1的时候,任何数均余0。所以if语句就很轻易得能写出来了。 再说n为奇数时,很明显,奇数和2互质,那么运用欧拉定理,必定存在一个f(n)使余数为1,下面要做的就是找出这个最小的f(n)就好。[/align]
[align=left]*/[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]Problem Description[/align]
Give a number n, find the minimum x(x>0) that satisfies 2^x mod n = 1.
[align=left]Input[/align]
One positive integer on each line, the value of n.
[align=left]Output[/align]
If the minimum x exists, print a line with 2^x mod n = 1.
Print 2^? mod n = 1 otherwise.
You should replace x and n with specific numbers.
[align=left]Sample Input[/align]
2
5
[align=left]Sample Output[/align]
2^? mod 2 = 1
2^4 mod 5 = 1
/* (此程序和下面的程序耗时相同) #include<stdio.h> int main() { int n,x,m; while(~scanf("%d",&n)) { if(n==1||n%2==0) { printf("2^? mod %d = 1\n",n); continue;} else { m=1; for(x=1;;x++) { m=m*2; if(m%n==1) break; m=m%n; } printf("2^%d mod %d = 1\n",x,n); } } return 0; } */ #include<stdio.h> int main() { int n; int x; int step; while(scanf("%d",&n)!=EOF) { x=1; step=2; if(n%2==0||n==1) printf("2^? mod %d = 1\n",n); else { w 4000 hile(step!=1) //直接从x=2开始,因为不可能有结果是x=1 { step=step*2%n; x++; } printf("2^%d mod %d = 1\n",x,n); } } return 0; }
相关文章推荐
- HDU-1395 2^x mod n = 1
- hdu 1395-2^x mod n = 1-易超时
- HDU 1395 2^x mod n = 1(暴力枚举)
- HDU 1395 2^x mod n = 1
- hdu 1395 2^x mod n = 1 欧拉定理(当然可以直接暴力)
- (step7.2.1)hdu 1395(2^x mod n = 1——简单数论)
- (step7.2.1)hdu 1395(2^x mod n = 1——简单数论)
- HDU-1395-2^x mod n = 1(数学题(二次出错))
- hdu 1395 2^x mod n = 1 (简单数论)
- HDU 1395 2^x mod n = 1(快速幂取模)
- HDU 1395 2^x mod n = 1【数学】
- hdu 1395 2^x mod n = 1
- 【HDU】 1395 2^x mod n = 1
- hdu1395 2^x mod n = 1(数论:快速幂取模+欧拉定理)
- HDU 1395 2^x mod n = 1
- hdu 1395(2^x mod n = 1)
- HDU 1395 2^x mod n = 1
- hdu 1395 2^x mod n = 1
- Hdu 1395 2^x mod n = 1 (欧拉定理 分解素因数)
- hdu 1395 2^x mod n = 1(欧拉函数)