您的位置:首页 > 其它

HDU 5187 zhx's contest 快速幂,快速加

2016-04-24 21:03 405 查看

题目链接:

hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5187

bc(中文): http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=571&pid=1002

题解:

求(2^n-2)%p,题目看错,一天都没什么思路,冷静一下。。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long LL;

LL _n, p;
//快速加 -> x*n
LL pow_add(LL x,LL n) {
LL ret = 0, base = x;
while (n) {
if (n & 1) {
ret = (ret + base) % p;
}
base = (base + base) % p;
n /= 2;
}
return ret;
}
//快速幂 -> x^n
LL pow_mod(LL x,LL n) {
LL ret = 1, base = x;
while (n) {
if (n & 1) {
ret = pow_add(ret, base);
}
base = pow_add(base, base);
n /= 2;
}
return ret;
}

int main() {
while (scanf("%lld%lld", &_n, &p) == 2 && _n) {
LL ans = pow_mod(2,_n);
ans = (ans + p - 2) % p;
printf("%lld\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: