UVA1730 Sum of MSLCM
题目大意
定义 。
求 。
解题思路
显然, 等价于 的约数和。
那么线性筛即可。
时间复杂度 。
CODE
#include <bits/stdc++.h>
using namespace std;
long long f[20000007], g[20000007], p[20000007], tot, n;
bool v[20000007];
void init(int n)
{
g[1] = f[1] = 1;
for (int i = 2; i <= n; i++)
{
if (!v[i])
v[i] = 1, p[++tot] = i, g[i] = i + 1, f[i] = i + 1;
for (int j = 1; j <= tot && i <= n / p[j]; ++j)
{
v[p[j] * i] = 1;
if (!(i % p[j]))
{
g[i * p[j]] = g[i] * p[j] + 1;
f[i * p[j]] = f[i] / g[i] * g[i * p[j]];
break;
}
else
f[i * p[j]] = f[i] * f[p[j]], g[i * p[j]] = 1 + p[j];
}
}
for (int i = 1; i <= n; i++)
f[i] = f[i - 1] + f[i];
}
signed main()
{
init(20000000);
while (cin >> n && n)
cout << f[n] - 1 << '\n';
return 0;
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122067