显示输出30000以内的所有完备数(一个数等于它所有约数(自身除外)之和,则称完备数)及
互满数(对2个数,其中一个数的所有约数(自身除外)之和等于另一个数,则称互满数)。
互满数(对2个数,其中一个数的所有约数(自身除外)之和等于另一个数,则称互满数)。
要求编写1个子函数:求一个数的所有约数(自身除外)之和。
#include <stdio.h>
int main()
{
void act1();
int act2();
int z,x;
act1();
printf("下面求互满数\n");
for(z=1;z<30000;z++)
for(x=1;x<30000;x++)
if ((act2(z)==x)&&z!=x)
{
printf("%d,%d\n",z,x);
}
}
void act1()//求约数之和
{
int i=2;
int sum,j;
for(i = 2; i <= 30000 ; ++i)
{
sum = 1;
for(j = 2; j < i; ++j)
if(i % j == 0)
sum += j;
if(sum == i)
printf("%d\n",i);
}
}
int act2(int a)//求互满数
{
int i;
int s=0;
for (i=1; i<a; i++)
{
if (a%i==0)
{
s+=i;
}
}
return s;
}