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]);
}
posted @   changwenxuan  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示