C语言问题 求解
//大意/有两个数,每个数的所有公约数(除了本身以外)的和正好等于对方,则称这两个数互为互满数,求30000以内的所有互满数。。#include "stdio.h"
int f1(int n)
{
int p=n-1,a=0; //从本身后一数算起
for(p;p>1;p--)//依次检测
{
if(n%p==0)
a+=p;
}
return a;//返回所有公约数之和
}
void main()
{ int i,j,t=0,y=0,a[200],b[200];//定义a[200],b[200]存储互满数
for(i=30000;i>0;i--)
for(j=30000;j>0;j--) //双重循环
{ if((f1(i)==j)&&(f1(j)==i)&&(i!=j))//求互满数
{ a[t]=i;
b[y]=j; //存储在数组里面
printf("互满数:%d %d",a[t],a[y]);
t++;
y++;
}
}
}