首页 > 代码库 > ACdream 1007 (快速幂)

ACdream 1007 (快速幂)

题目链接

a + b

Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)

Problem Description

Input

Output

Sample Input

23 11 2 33 101 2 3

Sample Output

660074
/*************************************************************************    > File Name: 1007.cpp    > Author: Stomach_ache    > Mail: sudaweitong@gmail.com    > Created Time: 2014年08月11日 星期一 07时44分39秒    > Propose:  ************************************************************************/#include <cstdio>/*Let‘s fight!!!*/typedef long long LL;const LL mod = (LL)1e10 + 7;LL mul(LL a, LL b) {      LL res = 0;    while (b) {          if (b&1) if ((res += a) >= mod) res -= mod;        a <<= 1;        if (a >= mod) a -= mod;        b >>= 1;    }    return res;}LL mod_pow(LL a, LL b) {      LL res = 1;    while (b) {          if (b&1) res = mul(res, a);        a = mul(a, a);        b >>= 1;    }    return res;}int main(void) {    int t;    scanf("%d", &t);    while (t--) {        LL n, k, ans = 0, x;        scanf("%lld %lld", &n, &k);        k %= 9560995488LL;        for (int i = 0; i < n; i++) {            scanf("%lld", &x);            ans += mod_pow((x%mod+mod)%mod, k);            if (ans >= mod) ans -= mod;         }        printf("%lld\n", ans);    }    return 0;}