题目链接:https://projecteuler.net/problem=21
埃筛筛出来所有的d就好了
代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int d[MAXN];
void init()
{
for(int i=1;i<MAXN;i++)
{
for(int j=i+i;j<MAXN;j+=i)
{
d[j]+=i;
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
init();
int ans=0;
for(int i=1;i<10000;i++)
{
int tmp=d[i];
if(tmp==i)
continue;
if(d[tmp]==i)
ans+=i;
}
printf("%d\n",ans);
return 0;
}