首页 > 代码库 > Acdream 1007 快速幂,模乘法
Acdream 1007 快速幂,模乘法
http://acdream.info/problem?pid=1007
题目大意,给你n个数,输出这n个数的k次方的和,注意最后的结果得是正数。
刚开始因为模乘法没有考虑好,一直死wa不过,后来在模乘法中特判一下,终于ac了。
#include<cstdio>typedef long long LL;const LL MOD = 10000000007LL;int n;LL k, temp, sum;LL mul_mod(LL a, LL b){ LL res = 0; int flag = (b < 0); b = (b ^ (b >> 63)) - (b >> 63); while(b) { if(b & 1) res = (res + a) % MOD; b >>= 1; a = (a << 1) % MOD; } res %= MOD; return (flag ? (~res + 1) : res);}LL calc(LL a, LL k){ LL res = 1; while(k) { if(k & 1) res = mul_mod(a, res) % MOD; k >>= 1; a = mul_mod(a, a) % MOD; } return res;}int main(){ int tCase; scanf("%d", &tCase); while(tCase--) { sum = 0; scanf("%lld%lld", &n, &k); for(int i = 0; i < n; ++ i) { scanf("%lld", &temp); sum = (sum + calc(temp, k)) % MOD; } printf("%lld\n", (sum + MOD) % MOD); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。