传送门
http://acm.hdu.edu.cn/showproblem.php?pid=1999
代码如下:
#include<stdio.h>
#define MAX 50
int sum[MAX];
int flag[1001];
void init()
{
int i,j;
for(i=1;i<=MAX/2;++i)
for(j=i+i;j<MAX;j+=i){
sum[j]+=i;
// printf("%d %d\n",j,i);
}
for(i=1;i<MAX;++i)
if(sum[i]<=1000)
flag[sum[i]]=1;
}
int main()
{
int T,n;
init();
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
if(flag[n])
printf("no\n");
else
printf("yes\n");
}
return 0;
}
其中
for(i=1;i<=MAX/2;++i)
for(j=i+i;j<MAX;j+=i){
sum[j]+=i;
printf("%d %d\n",j,i);
}
i是j的因子,非常强大,可以通过枚举因子来遍历所有的真因子和