【欧拉计划】21. Amicable numbers

(本题取 $n=10000$)

【思路】先 $\mathcal O(n)$ 预处理 $1 \sim 10000$ 因数个数,然后 $\mathcal O(n)$ 枚举,总体时间复杂度仍为 $\mathcal O(n)$:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
int ans,d[10001];
int main()
{
for(int i=1;i<=10000;++i)
{
for(int j=i<<1;j<=10000;j+=i)
{
d[j]+=i;
}
}
for(int i=1;i<=10000;++i)
{
if(d[i]<=10000&&d[d[i]]==i&&d[i]!=i)
{
ans+=i;
}
}
printf("%d",ans);
return 0;
}

【欧拉计划】21. Amicable numbers

https://hensier.github.io/projecteuler/21/

作者

hensier

发布于

2022-05-01

更新于

2023-01-02

许可协议

评论