您的位置:首页 > Web前端

HDU1323 Perfection

2017-02-14 22:13 106 查看
原题传送

题目的意思是比较一个数与它的因子和,若相等为perfect;若这个数小于它的因子和为abundant;若这个数小于它的因子和为deficient

我们知道,如果一个数m=i*j(i != m && j != m)那么,i,j都为它的因子。因此,我们可以利用这制作循环把2-60000所有数的因子和求出,然后进行判断。

附代码:

#include <stdio.h>
int main(void) {
int i, j;
int A[60005];
for(i = 2;i < 60000;i++)
A[i] = 1;
for(i = 2;i < 245;i++) { //i * i <= 60000时退出循环,简化后i < 245
A[i * i] += i;   //i * i的其中一个因子为i
for(j = i + 1;i * j < 60001;j++)
A[i * j] += i + j;   //i * j的其中两个因子为i和j
}
puts("PERFECTION OUTPUT");
while(scanf("%d", &i), i)
printf("%5d  %s\n", i, i < A[i] ? "ABUNDANT" : i > A[i] ? "DEFICIENT" : "PERFECT");
puts("END OF OUTPUT");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: