ACdream 1007 (快速幂)

题目链接

a + b

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

Problem Description

Input

Output

Sample Input

2
3 1
1 2 3
3 10
1 2 3

Sample Output

6
60074


/*************************************************************************
    > File Name: 1007.cpp
    > Author: Stomach_ache
    > Mail: [email protected]
    > 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;
}




ACdream 1007 (快速幂)

时间: 2024-11-06 11:52:59

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

ACM学习历程—HDU 5451 Best Solver(Fibonacci数列 &amp;&amp; 快速幂)(2015长春网赛1007题)

Problem Description The so-called best problem solver can easily solve this problem, with his/her childhood sweetheart. It is known that y=(5+2√6)^(1+2^x).For a given integer x (0≤x<2^32) and a given prime number M (M≤46337) , print [y]%M . ([y] mean

ACdream 1093 女神的正多面体 矩阵快速幂

题目大意:给你三种正多边形,给你起点s,终点e以及最多行走的步数k,问有多少种路径方案(路径中只要有一个顶点不同即视为不同). 题目分析: 可以通过矩阵快速幂求解. 为每个正多边形(最多三个)构建一个邻接矩阵A,然后第K步的方案数即为A^k. 结果即为A^1 + A^2 + A^3 + ...... + A^k. 对于这种形式的矩阵运算,我们可以把它拆分成: k为奇:ans = (A^1 + A^2 + ... + A^(k/2)) + (A^1 + A^2 + ... + A^(k/2)) *

矩阵快速幂刷题系列

来源自http://blog.csdn.net/chenguolinblog/article/details/10309423 hdu 1575 Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5587    Accepted Submission(s): 4200 Problem Description A为一个方阵,则Tr

快速幂取模(POJ 1995)

http://poj.org/problem?id=1995 以这道题来分析一下快速幂取模 a^b%c(这就是著名的RSA公钥的加密方法),当a,b很大时,直接求解这个问题不太可能 利用公式a*b%c=((a%c)*b)%c 每一步都进行这种处理,这就解决了a^b可能太大存不下的问题,但这个算法的时间复杂度依然没有得到优化 由此可以用快速幂算法优化: http://www.cnblogs.com/qlky/p/5020402.html 再结合取模公式: (a + b) % p = (a % p

HDU 1757 A Simple Math Problem (矩阵快速幂)

[题目链接]:click here~~ [题目大意]: If x < 10 f(x) = x. If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + -- + a9 * f(x-10); 问f(k)%m的值. [思路]:矩阵快速幂,具体思路看代码吧,注意一些细节. 代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; const

快速幂及快速幂取模

快速幂顾名思义,就是快速算某个数的多少次幂.其时间复杂度为 O(log?N), 与朴素的O(N)相比效率有了极大的提高.——bybaidu 快速幂可以用位运算这个强大的工具实现. 代码: 1 int pow(int a,int b) 2 { 3 int ans=1; 4 while(b!=0) 5 { 6 if(b&1) 7 ans*=a; 8 a*=a; 9 b>>=1; 10 } 11 return ans; 12 } 快速幂取模需要记住一个定理:积的取模等于取模积的取模:算法是蒙

Codeforces Round #291 (Div. 2) E - Darth Vader and Tree (DP+矩阵快速幂)

这题想了好长时间,果断没思路..于是搜了一下题解.一看题解上的"快速幂"这俩字,不对..这仨字..犹如醍醐灌顶啊...因为x的范围是10^9,所以当时想的时候果断把dp递推这一方法抛弃了.我怎么就没想到矩阵快速幂呢.......还是太弱了..sad..100*100*100*log(10^9)的复杂度刚刚好. 于是,想到了矩阵快速幂后,一切就变得简单了.就可以把距离<=x的所有距离的点数都通过DP推出来,然后一个快速幂就解决了. 首先DP递推式很容易想到.递推代码如下: for(

NYOJ127 星际之门(一)(最小生成数的个数+快速幂)

题目描述: http://acm.nyist.net/JudgeOnline/problem.php?pid=127 可以证明,修建N-1条虫洞就可以把这N个星系连结起来. 现在,问题来了,皇帝想知道有多少种修建方案可以把这N个星系用N-1条虫洞连结起来? 输入 第一行输入一个整数T,表示测试数据的组数(T<=100) 每组测试数据只有一行,该行只有一个整数N,表示有N个星系.(2<=N<=1000000) 输出 对于每组测试数据输出一个整数,表示满足题意的修建的方案的个数.输出结果可能