Luogu3708 - koishi的数学题

Luogu3708 - Click Here

  

Description

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

  输入一个整数n,设$f(x)=\sum_{i=1}^n x~mod~i$,你需要输出$f(1),f(2)…f(n)$。

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

  

Input

  一个正整数n。

  对于100%的数据,$1 \leq n \leq 10^6$。

  

Output

  一行用空格分隔的n个整数$f(1),f(2)…f(n)$。

  

Solutions

  今天的模拟赛做了一道调和级数的题,然后就想起这题了233。

  

  首先易发现$x\,mod\,a$($a$为定值)的变化一定是$0,1,2…a-1,0,1,2…a-1…$这样循环的。

  再观察$x \, mod \, a \, - \, x$的变化,它变成了$0,0,0…a,a,a…2a,2a,2a…$。即在$a$的倍数位置差值增加$a$。

  因此,对于此题,只需要对于每个模数$i$都在对应位置累计差值,然后跑一遍前缀和即可得到答案。

  

  时间复杂度$\sum \frac{n}{i}=O(nlogn)$

  

CODE

CODE - Click Here

本站总访问量次 | 本站访客数人次

Powered by Hexo | Designed by iTimeTraveler | Refined by CSHwang