UVA1730
思路
首先明确 $\text{MSLCM}(n)$ 到底是什么。
显然,$n$ 的约数的倍数一定有 $n$。
所以得到:
$$ \text{MSLCM}(n)=\sum_{i|n}i $$
也就是说,$\text{MSLCM}(n)$ 就是 $n$ 的约数和。
所以就是一道线性筛模板题,约数和的线性筛参见 这里。
最后求一次前缀和然后 $O(1)$ 回答即可。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e7+5;
long long num[maxn],p[maxn],ans[maxn],sum[maxn],tot;
bool v[maxn];
inline void init(int n) {
num[1]=ans[1]=1;
for (int i=2; i<=n; i++) {
if (!v[i])v[i]=1,p[++tot]=i,num[i]=i+1, ans[i] = i + 1;
for (int j=1; j<=tot&&i<=n/p[j]; j++) {
v[p[j]*i] = 1;
if (i%p[j]) ans[i*p[j]]=ans[i]*ans[p[j]],num[i*p[j]]=1+p[j];
else {num[i*p[j]]=num[i]*p[j]+1,ans[i*p[j]]=ans[i]/num[i]*num[i*p[j]];break;}
}
}
for(int i=3;i<=n;i++)ans[i]+=ans[i-1];
}
long long now;
int main() {
init(2e7);
while(scanf("%lld",&now)&&now)printf("%lld\n",ans[now]);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现