HDU 1395 2^x mod n = 1【数学】
2014-07-31 15:00
399 查看
2^x mod n = 1
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11776 Accepted Submission(s): 3665
[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
[align=left]Author[/align]
MA, Xiao
[align=left]Source[/align]
ZOJ Monthly, February 2003
解题思路:此题运用到了欧拉定理。同余定理。
欧拉定理:若a,n为正整数,且a,n互质,则 a^x≡1(mod n)
在这里道题里: 2^x mod n = 1 求2的x次方对n取余等于1
①当n==1时,2^x mod 1 ≡ 0,所以排除n==1的情况。
②当n==偶数时,2^x 与 n 不会互质,2^x mod n ≠ 1,2^x对n取余都不会等于1,所以排除n==偶数的情况。
③当n==奇数时,2^x与n互质,即存在一个x使得2^x mod n = 1
解决问题的关键在于如何找到x
我们可以列举,当n=3时, 2^2 mod 3 =1
当n=5时, 2^4 mod 5 =1
当n=7时, 2^3 mod 7 =1
我们可以直接暴力求2的x次方,直到2^x mod n = 1
y=1; for(x=1;;x++) { y=y*2; y=y%n; //同余定理 if(y==1) break; }
通过一个将y初始化为1,通过一个for循环,
x初始化为1,每次循环表示2的x次方。
这里运用到了同余定理。
同余定理:(a*b)%c==((a%c)*(b%c))%c
y=y*2每一次都对n取余,与y^x 对n取余结果相等。
以n==5为例,2^4 mod 5==1,
2^4 mod 5 == ((2%5)*(2%5)*(2%5)*(2%5))%5
上式=(2^3 * 2) % 5 = ( 8 * 2 ) % 5 = ( (8%5) * (2%5) ) %5 = ( 3 * 2 )%5 = 6 % 5 =1
当x=1时,y=2^1=2, y%n =2%5=2
当x=2时,y=2*2=4,y%n =4%5=4
当x=3时,y=4*2=8,y%n =8%5=3
当x=4时,y=3*2=6,y%n =6%5=1
2^4==16,16%5==1 结果相等。
直到y==1,即余数等于1时,跳出循环,输出y的x次方。
AC码
#include<stdio.h> int main() { int n,x,y; while(scanf("%d",&n)==1) { if(n%2==0||n==1) printf("2^? mod %d = 1\n",n); else { y=1; for(x=1;;x++) { y=y*2; y=y%n; //同余定理 if(y==1) break; } 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
- 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
- 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
- HDU_1395 2^x mod n = 1
- hdu 1395 2^x mod n = 1