洛谷 P3708 koishi的数学题

来源:互联网 发布:苍老师最经典 知乎 编辑:程序博客网 时间:2024/06/01 09:21

题目描述

Koishi在Flandre的指导下成为了一名数学大师,她想了一道简单的数学题。

输入一个整数n,设,你需要输出

按照套路,Koishi假装自己并不会做这道题,就来求你帮忙辣。

输入输出格式

输入格式:

一个正整数n。

输出格式:

一行用空格分隔的n个整数

输入输出样例

输入样例#1:
10
输出样例#1:
9 16 22 25 29 27 29 24 21 13

说明

对于20%的数据,

对于60%的数据,

对于100%的数据,

一定是窝太菜了,月赛时只想出了n^2的做法,就没有写。

下来看zzq的题解,发现根本看不懂,QwQ。

其实真的不难,我们考虑递推:

初始数列0000000000

先都加1,变成

1111111111

发现第一个1其实是0,所以ans-1.

0111111111

再加1,变成

1222222222

前两个数都要被mod掉,所以ans-2-1.

综上,发现f(x)=f(x-1)+n-kΣi=1(x%k==0)

所以只要知道x的所有约数的和即可,筛一遍就好了。


#include<iostream>#include<cstdio>using namespace std;const int N=1e6+5;int n;long long s[N],ans;int main(){scanf("%d",&n);for(int i=1;i<=n;i++)for(int j=i;j<=n;j+=i)s[j]+=i;for(int i=1;i<=n;i++){ans+=n-s[i];printf("%lld ",ans);}printf("\n");return 0;}


0 0