hdu1061(数论:快速幂取模)
2014-07-12 16:57
281 查看
对着算法导论上写不行,因为导论上默认b对应二进制存入数组中
但实际上取不出来,所以需要移位操作,会想到用向左移位,每次恰好读的是最高位
但这样是错误的,因为左移等价于乘以2,所以这个数一直在增长,直到超出数据范围变为负值才会结束
所以应该采用右移位
对应的代码如下:
数据类型采用int时,需要cout << mod_exp(a%10, a, 10) << endl;
不然会WA掉,我猜是给出的数据大小超出了int
但实际上取不出来,所以需要移位操作,会想到用向左移位,每次恰好读的是最高位
但这样是错误的,因为左移等价于乘以2,所以这个数一直在增长,直到超出数据范围变为负值才会结束
所以应该采用右移位
对应的代码如下:
#include <iostream> using namespace std; int mod_exp(long long a, long long b, long long n) { int ans = 1; while(b) { if(b & 1) ans = ans*a %n; a = a*a%n; b >>= 1; } return ans%n; } int main(void) { long long a, n, b, c; cin >> n; while(n--) { cin >> a; cout << mod_exp(a, a, 10) << endl; } return 0; }
数据类型采用int时,需要cout << mod_exp(a%10, a, 10) << endl;
不然会WA掉,我猜是给出的数据大小超出了int
相关文章推荐
- hdu 1061 Rightmost Digit(快速幂取余)
- 数论+快速幂-hdu-4704-Sum
- hdu 1061 快速幂
- HDU 5015 233 Matrix (数论——矩阵快速幂)
- hdu 1452 Happy 2004(数论(模P乘法逆元+快速幂取模))
- hdu 1061 Rightmost Digit(快速幂取余)
- HDU 2685 I won't tell you this is about number theory (数论 公式 快速幂取模)
- hdu 4990 Reading comprehension 矩阵快速幂or数论 bestcoder round 8b
- HDU 1061-Rightmost Digit(快速幂)
- hdu 1061 Rightmost Digit 快速幂
- HDU 1061(快速幂取模)
- hdu 1452 Happy 2004(数论:积性函数+快速幂+同余方程+扩展欧几里得算法)
- hdu1395 2^x mod n = 1(数论:快速幂取模+欧拉定理)
- HDU - 1061 - Rightmost Digit (快速幂取模!)
- HDU-#1061 Rightmost Digit(规律、分治、快速幂取模)
- HDU 3117Fibonacci Numbers(求斐波那契前四位与后四位 数论知识+矩阵快速幂)
- hdu 2462(数论:欧拉定理+快速幂取模优化+欧拉函数)
- 【快速幂取模】HDU 1061---Rightmost Digit
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
- HDU 1061 Rightmost Digit(快速幂)