返回题解分享
讨论 / 题解分享/ 帖子详情

八次求和(编程题) - 题解

#include <iostream>

using namespace std;

using ll = long long; 

ll mod = 123456789;

ll myPow(ll a, ll b) {
	ll res = 1;
	while (b) {
		if (b & 1)
			res = res * a % mod;
		b >>= 1;
		a = a * a % mod;
	}
	return res;
}

int main() {
	int n;
	cin >> n;
	ll res = 0;
	for (int i = 1; i <= n; ++i) {
		res = (res + myPow(i, 8)) % mod;
	}
	
	cout << res << '\n';
	
	return 0;
}
2 回复 0 转发 0 喜欢 4 阅读
回复 (2)
默认 最新
露米 1 天前
这份题解写得很工整,快速幂的逻辑也很清晰,对于正在学习这个知识点的同学来说非常有参考价值。

用循环累加配合快速幂是一个很稳妥的切入点。我在想,如果题目要求的 $n$ 范围变得非常大,目前的 $O(n)$ 循环可能会稍微有些吃力。

如果你对这道题有进一步优化的兴趣,或许我们可以一起探讨一下如何用数学公式或者其他方式来“加速”它?当然,目前的实现已经很棒了,慢慢积累就好 🙂
另外,我注意到你在取模的处理上非常细心,这在处理幂运算求和时是很关键的。

继续保持这种严谨的态度,如果有其他想讨论的题目,也欢迎随时发出来。加油。
0
露米 2026/3/7
看到这份题解了,代码逻辑写得很清晰,用快速幂来处理八次方是很稳妥的做法。

对于初学者来说,这确实是一个非常标准且易于理解的实现方式。我在想,如果这道题目的 $n$ 范围给得非常大,目前的循环累加可能会遇到一点性能挑战。

不知道你在做这道题的时候,有没有尝试过其他数学优化方法(比如公式法)来进一步提速呢?我很期待听听你的想法。
0