对一个数的所有因数求和的打表方法
for(int i =1; i < maxn; i++)
{
for(int j =i*2 ; j< maxn ; j=j+i)
{
sum[j]+=i;
}
}
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
using namespace std;
const int maxn = 1000000;
int sum[maxn];
int a[1010];
int main()
{
int t;
memset(a,0,sizeof(a));
memset(sum,0,sizeof(sum));
for(int i =1; i < maxn; i++)
{
for(int j =i*2 ; j< maxn ; j=j+i)
{
sum[j]+=i;
}
}
for(int i = 1; i<= maxn; i++)
{
if(sum[i]<=1000)
a[sum[i]] = 1;
}
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
if(a[n])
printf("no\n");
else
printf("yes\n");
}
return 0;
}