projecteuler Non-abundant sums 23

数据很小,适合打表

//execution time : 0.157 s
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <algorithm>
#define inf 0x3f3f3f3f
#define SI(a) scanf("%d",&a)
#define set0(a) memset(a,0,sizeof(a))
#define setMo(a) memset(a,-1,sizeof(a))
typedef long long ll;
const int mod = 998244353;
const int maxn = 30010;
using namespace std;
bool vis[maxn];

bool judge(int num)
{
    
    
    int up = sqrt(num);
    ll sum = 1;
    for(int i = 2;i <= up;i++)
        if(num%i == 0)
        {
    
    
            if(i*i != num){
    
    
                sum += i;
                sum += num/i;
                //cout<<i<<" "<<num/i<<endl;
            }
            else
                sum += i;
        }
    //cout<<sum<<endl;
    if(sum > num)return 1;
    return 0;
}
int main()
{
    
    
    set0(vis);
	for(int i = 1;i <= 28123;i++)vis[i] = judge(i);
	//cout<<judge(12)<<endl;
	ll sum = 0;
	for(int i = 1;i <= 28123;i++)
    {
    
    
        bool flag = false;
        for(int j = 12;j <= i;j++)
            if(vis[j]==1&&vis[i-j]==1){
    
    flag = true;break;}
        if(!flag)sum += i;
    }
    cout<<sum<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42937838/article/details/105499501
23