LightOJ 1213 Fantasy of a Summation(快速幂)
2016-05-29 11:58
330 查看
题目链接:
LightOJ 1213 Fantasy of a Summation
题意:
给定n,k,m求解:
分析:
其实就是k层循环,每层遍历n个数字,把遍历到的数字相加和取模。模拟一下可以得到:
LightOJ 1213 Fantasy of a Summation
题意:
给定n,k,m求解:
int res = 0; for( i1 = 0; i1 < n; i1++ ) { for( i2 = 0; i2 < n; i2++ ) { for( i3 = 0; i3 < n; i3++ ) { ... for( iK = 0; iK < n; iK++ ) { res = ( res + A[i1] + A[i2] + ... + A[iK] ) % MOD; } ... } } }
分析:
其实就是k层循环,每层遍历n个数字,把遍历到的数字相加和取模。模拟一下可以得到:
ans = sum * n^(k -1) * k。sum是n个数字之和。然后就是快速幂计算下就好了。
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <climits> #include <cmath> #include <ctime> #include <cassert> #include <set> #define IOS ios_base::sync_with_stdio(0); cin.tie(0); using namespace std; typedef long long ll; const int MAX_N = 1010; int T, n, total, cases = 0, K; ll sum, mod, data[MAX_N]; ll quick_pow(ll a, ll b) { ll res = 1, tmp = a; while(b){ if(b & 1) res = res * tmp % mod; tmp = tmp * tmp % mod; b >>= 1; } return res; } int main() { scanf("%d", &T); while(T--){ sum = 0; scanf("%d%d%lld", &n, &K, &mod); for(int i = 0; i < n; i++){ scanf("%lld", &data[i]); sum += data[i]; sum %= mod; } ll ans = quick_pow(n, K - 1) * K % mod * sum % mod; printf("Case %d: %lld\n", ++cases, ans); } return 0; }
相关文章推荐
- 1.m分解阶乘之和
- 2.几种递推数
- 3.欧拉函数
- 4.快速幂模m算法
- 5.扩展欧几里得&&中国剩余定理
- 6.数论_web
- Project Euler Problem 387 - Harshad Numbers - 深度优先
- 编程之美2015初赛A
- zoj3549 快速幂
- LightOJ 1067 Combinations 组合数取模
- 数论题集
- 快速幂。素数筛选。辗转相除。
- 原根
- Codevs 1250、1732 矩阵 快速幂
- 阶与原根学习笔记
- HDU 1299 Diophantus of Alexandria
- Leftmost Digit(HDU 1060)
- Rightmost Digit(HDU 1061)
- Python-在奇数中寻找素数
- ZOJ 2674 Strange Limit 欧拉定理