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;
}
思路 : 主要就是[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;
}
相关文章推荐
- hdu 1395 2^x mod n = 1 (简单数论)
- hdu1395 2^x mod n = 1(数论:快速幂取模+欧拉定理)
- zoj1489 hdu 1395 (数论)
- ACM 数论 hdu 1395 2^x mod n = 1
- hdu 1395 比较简单的数论题
- 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——简单数论)
- HDU1395_2^x mod n = 1【数论】【水题】
- HDU 1395 数论小技巧
- hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛
- ACM 数论 HDU 2608 0 or 1 规律!
- 【数论】HDU 4952 Number Transformation
- 数论(CRB and Candies,HDU 5407)
- hdu 4790 数论 实现 组合数学
- hdu 5833 Zhu and 772002 2016中国大学生程序设计竞赛 - 网络选拔赛1002 [质因子分解+高斯消元]【数论】
- hdu 5317 RGCDQ(数论素筛)
- hdu 2588 搞了好久的数论题 1到n的数与n的公约数大于m的数的个数
- hdu 洗牌问题 数论
- HDU(4394),数论上的BFS