您的位置:首页 > 其它

hdu 1395 数论

2012-11-17 15:36 267 查看
题意:很简单就不啰嗦了.

思路 : 主要就是[2 ^(a + b)] % n = [(2 ^ a % n) * (2 ^ b % n)] % n.等式证明就是设2 ^ a % n = m1, 2 ^ b % n = m2, 那么必然分别对应一个k1,k2使得:

2 ^ a = k1 * n + m1;

2 ^ b = k2 * n + m2;

然后将两个等式相乘好了,接下来就是数学计算,很简单.

知道这个等式后就很简单了.

代码:

#include <stdio.h>

#include <string.h>

int main()

{

double x;

int n, tmp, mi;

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

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

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

}

else {

mi = 1, tmp = 2;

while(tmp != 1){

tmp = tmp * 2 % n;

mi++;

}

printf("2^%d mod %d = 1\n", mi, n);

}

}

return 0;

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