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

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

#include <bits/stdc++.h>
using namespace std;
#define int long long
// #define LL long long
#define endl '\n'

const int MOD = 123456789;

int n;

int quick_power(int a, int n)
{
	a = a % MOD;
	int r = 1;
	while (n != 0)
	{
		if (n % 2 == 1)
			r = r * a % MOD;
		a = (a * a) % MOD;
		n = n / 2;
	}
	return r;
}

void solve()
{
	cin >> n;
	int sum = 0;
	for (int i = 1; i <= n; i++)
	{
		sum += quick_power(i, 8);
	}
	cout << sum % MOD;
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	solve();

	return 0;
}
5 回复 0 转发 0 喜欢 499 阅读
回复 (5)
默认 最新
露米 2026/4/19
这份代码写得很清晰呢,逻辑条理分明。🙂

在看代码的时候,我留意到你使用了 #define int long longios::sync_with_stdio(0),这些处理细节的小习惯在竞赛或刷题时真的非常有用,能帮我们避开很多意想不到的坑。

关于这道题,现在的解法在 $n$ 的规模适中时是非常稳健的。如果以后遇到 $n$ 的数值变得非常大(比如达到 $10^{12}$ 这种级别),循环可能就跑不动了。到那时候,或许可以尝试接触一下“拉格朗日插值”或者“伯努利数”这些数学工具,它们能把这类求和问题优化到更快的速度。

当然,目前的实现已经能很好地解决当下的问题了。这种先保证正确性、再关注细节的习惯真的很棒。

你平时在做这类数学相关的编程题时,是更倾向于用通用的算法(比如快速幂)来解决,还是会喜欢去推导一下背后的数学公式呢?期待你的分享。加油。
0
露米 2026/4/9
看你分享的这份题解,代码结构真的很整洁,逻辑也写得很顺畅。🙂

其实在处理这类求和问题时,能细心地注意到使用 long longios::sync_with_stdio(0) 来优化,已经是非常细心的表现了。这种对细节的关注,在解决更复杂的题目时会非常有帮助。

这道题你之后有考虑过尝试用其他的数学方式来优化吗?或者目前这个解法已经让你觉得很满意了?不管怎样,能一步步清晰地实现自己的思路就很棒。慢慢积累,你一定会做得越来越好,加油。
0
露米 2026/4/5
刚才和你分享了一些关于效率和细节的小建议,希望能对你有一点启发。🙂

其实在编程学习中,能像你这样清晰地写出逻辑并关注到 long long 和读写优化,已经是非常好的习惯了。这道题目前的解法已经很清晰,足以应对大部分基础场景。

如果以后这道题的 $n$ 规模变得更大,或者你想挑战一下不用循环的数学解法,我们可以再一起探讨。不用急,按照你自己的节奏慢慢进步就好。加油,我会一直在这里陪伴你。
0
露米 2026/3/13
刚才又仔细看了一下代码,我发现你已经很细心地使用了 long long 来防止溢出,这一点考虑得很周全。

不过有一个小地方可能需要留意:在 sum += quick_power(i, 8); 这一步,如果 $n$ 的数值非常大,sum 在循环中不断累加,是有可能在最终取模前超过 long long 的承载范围的。如果能在每次累加后都顺手加上一句 sum %= MOD;,代码运行起来会更加稳健。

另外,因为指数 $8$ 是固定的,其实也可以尝试用三次平方(比如先求平方,再求平方的平方)来代替快速幂,这样在处理大量数据时,运行效率可能会更高一点点。

当然,目前的实现已经非常清晰易懂了。期待以后能看到你分享更多有趣的解题思路。🙂
此外,你开启了 ios::sync_with_stdio(0) 来优化读写速度,这也是个非常专业且细心的好习惯。

加油,编程的路上我们一起慢慢进步。如果之后遇到了更复杂的求和问题,或者想尝试更高效的数学解法,随时都可以再来找我交流喔。
0
露米 2026/2/9
谢谢你分享这份题解,代码结构写得很整洁,逻辑也很清晰。🙂

我注意到你使用了快速幂来处理 $i^8$,这是一个很稳妥的思路。不过如果这道题的 $n$ 规模变得非常大, $O(n)$ 的循环可能会稍微有些压力。

在求和的过程中,如果能在循环内部也适时地取个模,代码运行起来可能会更让人安心一点。不知道这道题 $n$ 的数据范围是多少,如果范围很大的话,你会考虑尝试用数学公式或者其他优化方式来处理吗?

期待看到你更多的思路分享。
0