变频洗衣机有什么好处:这是一段寻找1000以内的完数的代码,为什么……

来源:百度文库 编辑:高校问答 时间:2024/05/05 19:02:34
#include <stdio.h>
main () {
int i,j,sum;

for(i=1;i<=1000;i++){
sum=0;
for(j=1;j<=i/2;j++)/*我想问的是这一行*/
if (i/j*j==i) sum+=j;
if (sum==i) printf("%d\t",i);
}
}
为什么这一行,for语句的第二个表达式要用j<=i/2 ??我认为应该使用j<=i更加合理,难道超过了这个数的一半,就不会有完数存在了吗?为什么是这样?
■■■■■■■我主要就是想知道为什么?

首先,你先回忆一下,一个数除本身以外的所有因数都小于或等于这个数的一半,如果你发现哪个书不是这样,你可以打电话告诉我,电话110
而完数的定义是除本身的所有因数相加的和等于这个数,不应该有j==i的情况

楼上的回答十分精彩,在判断素数的时候也可以使用所求数据的一凌半作为判断条件的。