printf("There are following perfect numbers smaller than 1000:\n");
for(a=1;a<1000;a++) /*循环控制选取 1~1000 中的各数进行判断*/
{
for(m=0,i=1;i<=a/2;i++) /*计算 a 的因子,并将各因子之和 m=a,则 a 是完全数输出*/
if(!(a%i))m+=i;
if(m==a)
printf("%4d ",a);
}
printf("\n");
}
*运行结果
TThere are following perfect numbers smaller than 1000:
6 28 496
26.亲密数
如果整数 A 的全部因子(包括 1,不包括 A 本身)之和等于 B;且整数 B 的全部因子(包括 1,不包括 B 本身)
之和
等于 A,则将整数 A 和 B 称为亲密数。求 3000 以内的全部亲密数。
*问题分析与算法设计
按照亲密数定义,要判断数 a 是否有亲密数,只要计算出 a 的全部因子的累加和为 b,再计算 b 的全部因
子的
累加和为 n,若 n 等于 a 则可判定 a 和 b 是亲密数。计算数 a 的各因子的算法:
用 a 依次对 i(i=1~a/2)进行模运算,若模运算结果等于 0,则 i 为 a 的一个因子;否则 i 就不是 a 的因子。
*程序说明与注释
#include<stdio.h>
int main()
{
int a,i,b,n;
printf("There are following friendly–numbers pair smaller than 3000:\n");
for(a=1;a<3000;a++) /*穷举 1000 以内的全部整数*/
{
for(b=0,i=1;i<=a/2;i++) /*计算数 a 的各因子,各因子之和存放于 b*/
if(!(a%i))b+=i; /*计算 b 的各因子,各因子之和存于 n*/
for(n=0,i=1;i<=b/2;i++)
if(!(b%i))n+=i;
if(n==a&&a<b)
printf("%4d..%4d ",a,b); /*若 n=a,则 a 和 b 是一对亲密数,输出*/
}
}