koishi的数学题
koishi的数学题
题目描述
Koishi 在 Flandre 的指导下成为了一名数学大师,她想了一道简单的数学题。
输入一个整数 ,设 ,你需要输出 。
按照套路,Koishi 假装自己并不会做这道题,就来求你帮忙辣。
输入格式
一个正整数 。
输出格式
一行用空格分隔的 个整数 。
样例 #1
样例输入 #1
10
样例输出 #1
9 16 22 25 29 27 29 24 21 13
提示
对于 的数据,。
对于 的数据,。
对于 的数据,。
解题思路
这几天在洛谷跳题,结果很多不会做qwq。
对于 ,关键是要想到可以转换为 ,因此就有
接下来可以考虑递推,假设我们已经知道了 中 这部分的结果,考虑能否推出 的结果。分以下两种情况考虑:
- :那么有 。
- :那么有 。
即如果 是 的约数,那么 就会比 多出 ,否则相等。因此对于整个 的结果,就会比 多出 的约数和。
所以对于 ,我们可以对每个 的分解约数求约数和,但这样的时间复杂度为 。为此我们可以反过来枚举约数 ,再枚举所有不超过 的 的倍数 ,那么这些 的都含有约数 ,时间复杂度就是 。
AC 代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;
LL s[N];
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j += i) {
s[j] += i;
}
}
LL last = 0;
for (int i = 1; i <= n; i++) {
printf("%lld ", 1ll * i * n + last - s[i]);
last -= s[i];
}
return 0;
}
参考资料
题解 P3708 【koishi的数学题】:https://www.luogu.com.cn/blog/asuldb/solution-p3708
本文来自博客园,作者:onlyblues,转载请注明原文链接:https://www.cnblogs.com/onlyblues/p/17778915.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
2022-10-21 C. Save the Magazines