c语言小问题
【程序功能】求3000以内的亲密数对.
如果A的全部真因子(包括1,不包括A自身)之和等于B;B的全部真因子之和等于A,则称整数A和B为一对亲密数。
【编程要求】
1. 编写函数int frinum(long s[][2],long n)实现如下功能:找到2~n分范围内的所有亲密数对,将这些亲密数对保存到s指向的二维数组中。返回函数s数组中存储的亲密数对的对数。
2. 编写函数main 实现以下功能:声明二维数组s和变量n,输入一个正整数并保存到n中,用二维数组s和变量n作为实参调用frinum函数,将n以内的所有的亲密数对输出到屏幕。
【测试数据与运行结果】
输入: n=3000
输出:
(220,284)
(1184,1210)
(2620,2924)
#include<stdio.h>
int frinum(long s[][2],long n)
{
long a,b,sum1=0,sum2=0,k=0,i,j;
for(a=2;a<=n;a++)
{ for(i=1;i<a;i++)
if(a%i==0) sum1+=i;
for(b=2;b<=n;b++)
{for(j=1;j<b;j++)
if(b%j==0) sum2+=j;
if(a!=b&&sum1==sum2)
{
s[k][0]=a;
s[k][1]=b;
k++;
}
sum2=0;
}
sum1=0;
}
return (k);
}
main()
{
long s[1000][2],n;
int i,k;
printf("Input n=");
scanf("%ld",&n);
k=frinum(s,n);
for(i=0;i<k;i++)
printf("(%ld,%ld)\n",s[i][0],s[i][1]);
}