[R3B]k次幂求和

// 14. [R3B]k次幂求和.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
[R3B]k次幂求和
原题地址:https://bs.daimayuan.top/p/14
题目描述
给定一个长度为 n 的整数数组 A,求 sum(i=1 to n) Ai^k,对 998244353 取模。
提示:
a^b = a * a * ... * a(共 k 个 a 相乘),称为 a 的 b 次幂,其中 a 称为底数,b 称为指数。
sum(i=1 to n) ai = a1 + a2 + ... + an。
输入格式
第一行包含两个整数 n 和 k,分别表示数组长度和幂的指数。
第二行包含 n 个整数,表示数组 A。
输出格式
输出一个整数,表示 sum(i=1 to n) Ai^k,对 998244353 取模。
样例输入
4 3
1 2 3 4
样例输出
100
样例解释
1^3 + 2^3 + 3^3 + 4^3 = 1 + 8 + 27 + 64 = 100。
数据范围与提示
对于 50% 的数据,Ai <= 1000。
对于 100% 的数据,1 <= n <= 100,1 <= k <= 100,1 <= Ai <= 10^9。
*/

#include <iostream>

using namespace std;

int n, k;
const long long MOD = 998244353;

long long quickmi(long long a, long long b) {
	long long res = 1;
	while (b) {
		if (b & 1) {
			res = res * a % MOD;
		}
		a = a * a % MOD;
		b >>= 1;
	}
	return res;
}


int main()
{
	cin >> n >> k;
	long long ans = 0;
	for (int i = 0; i < n; i++) {
		int t; cin >> t;
		ans += quickmi(t, k);
		ans %= MOD;
	}

	cout << ans << endl;

	return 0;
}

posted on 2025-07-11 11:36  itdef  阅读(14)  评论(0)    收藏  举报

导航