【欧拉计划】23. Non-abundant sums

(本题取 $n=28123$)

【思路】$\mathcal O(n \sqrt n)$ 预处理因数个数(用 Problem 21 的思路可优化至 $\mathcal O(n)$),然后 $\mathcal O(n^2)$ 模拟。最终的时间复杂度都为 $\mathcal O(n^2)$:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<stdio.h>
#include<stdbool.h>
int ans;
bool a[30001];
int fac(int x)
{
if(x==1)return 1;
int s=1;
for(int i=2;i*i<=x;++i)
{
if(x%i==0)
{
s+=i;
if(i*i!=x)s+=x/i;
}
}
return s;
}
int main()
{
for(int i=1;i<=28123;++i)a[i]=fac(i)>i;
for(int i=1;i<=28123;++i)
{
bool flag=false;
for(int j=1;j<=i>>1;++j)
{
if(a[j]&a[i-j])
{
flag=true;
break;
}
}
if(!flag)ans+=i;
}
printf("%d",ans);
return 0;
}

【欧拉计划】23. Non-abundant sums

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

作者

hensier

发布于

2022-05-01

更新于

2023-01-02

许可协议

评论