LGP3708题解

题面很直白,就不说了罢qaq

首先很明显,i=1nxmodi=nxi=1nixi

这道题要是直接求的话复杂度是不对的,而他让我们求 f(0)f(n1) 所有的值,所以考虑从 f(i) 得到 f(i+1)

f(i)f(i1)=ni=1ni(xix1i)

对于后面的 分类讨论:

  1. i|n 很明显多了一个 i
  2. 反之没有多

所以,后面的 相当于是 d|xd,也就是 σ(x)

所以就可以 O(n) 线性筛或 O(nlogn) 的暴力计算 σ 来解决此题啦!

由于自己太菜,不会线性筛 σ,所以就只能写暴力啦

code:

#include<cstdio>
const int M=1e6+5;
int n;
long long ans,sigma[M];
signed main(){
	int i,j;
	scanf("%d",&n);
	for(i=1;i<=n;++i){
		for(j=i;j<=n;j+=i){
			sigma[j]+=i;
		}
	}
	for(i=1;i<=n;++i){
		printf("%lld ",ans+=n-sigma[i]);
	}
}

本文作者:Prean

本文链接:https://www.cnblogs.com/lmpp/p/15784646.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Prean  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
var canShowAdsense=function(){return !!0};
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起