题目大意:设 σ2(n)=∑d|nd2 ,求所有 σ2(n) 为完全平方数的n的和
。。。大半夜不睡觉愉快地划水。。。
【答案】1922364685
#include <iostream>
#include <cmath>
#include <cstdio>
#define LL long long
using namespace std;
const int N = 64000000;
int tot,prime[N],v[N];
LL ans,f[N],num[N];
LL get_prime()
{
ans = f[1] = 1;
for (int i = 2;i < N;i ++)
{
if (!v[i])
{
prime[tot ++] = i;
num[i] = f[i] = 1ll * i * i + 1;
}
for (int j = 0;j < tot && i * prime[j] < N;j ++)
{
v[i * prime[j]] = true;
if (i % prime[j] == 0)
{
f[i * prime[j]] = f[i] / num[i] * (num[i] * prime[j] * prime[j] + 1);
num[i * prime[j]] = num[i] * prime[j] * prime[j] + 1;
break;
}
num[i * prime[j]] = 1ll * prime[j] * prime[j] + 1;
f[i * prime[j]] = f[i] * num[i * prime[j]];
}
LL t = sqrt(f[i]);
if (t * t == f[i]) ans += i;
}
}
int main()
{
get_prime();
cout << ans << endl;
return 0;
}