【Luogu】P3708Koishi的数字游戏(数论)

 

  题目链接

  考虑f(i)=i%1+i%2+i%3+.....+i%n

  f(i+1)=(i+1)%1+(i+1)%2+......+(i+1)%n

  其中不是i+1的因数的部分在f(i+1)的地方都加了1.  例如3%3=0,4%3=1;或5%4=1,6%4=2.。

  而是i+1的因数的部分……置零了。如2%3=2,3%3=0 。

  所以我们在根据f(i)计算f(i+1)时,先把每一位都+1(其实就是总体+n),然后减去所有i+1的因子。

  因子和应该用欧拉筛求,因为它是积性函数,然而我不会。 有没有大佬来讲一下……

  于是这道题就完了。

  

#include<cstdio>
#include<cctype>

long long sum[1000010];

int main(){
    sum[1]=1;
    int n;
    scanf("%d",&n);
    for(int i=2;i<=n>>1;++i)
        for(int j=i*2;j<=n;j+=i)    sum[j]+=i;
    long long ans=n-1;
    for(int i=1;i<=n;++i){
        printf("%lld ",ans);
        ans+=n-1-sum[i+1]-i-1;
    }
    return 0;
}

 

posted @ 2017-10-25 16:34  Konoset  阅读(140)  评论(0编辑  收藏  举报