c语言 求出亲密数对
//43、求2~1000中的所有亲密数对(亲密数对是指:如果a的因子和等于b,b的因子和等于a,则(a,b)就是亲密数对)#include<stdio.h>voidmai...
//43、求2~1000中的所有亲密数对(亲密数对是指:如果a的因子和等于b,b的因子和等于a,则(a,b)就是亲密数对)
#include <stdio.h>
void main()
{
int i,j,k,l,m,g,q,w;
int a[100],b[100];
int x,y;
for(i=2;i<1000;i++) //取a的值
{
x=0;y=0;m=0;g=0;
for(j=i+1;j<=1000;j++) //取b的值
{
for(k=1;k<i;k++)
if(i/k==0)
a[m++]=k; //找出a的因子
for(l=1;l<=j;l++)
if(j/l==0)
b[g++]=l; //找出b的因子
for(q=0;q<m;q++)
x+=a[q]; //a的因子之和
for(w=0;w<g;w++)
y+=b[w]; //b的因子之和
if(x==y)
printf("%d,%d\n",i,j);
}
}
}
输出结果乱七八糟 而且一直循环 展开
#include <stdio.h>
void main()
{
int i,j,k,l,m,g,q,w;
int a[100],b[100];
int x,y;
for(i=2;i<1000;i++) //取a的值
{
x=0;y=0;m=0;g=0;
for(j=i+1;j<=1000;j++) //取b的值
{
for(k=1;k<i;k++)
if(i/k==0)
a[m++]=k; //找出a的因子
for(l=1;l<=j;l++)
if(j/l==0)
b[g++]=l; //找出b的因子
for(q=0;q<m;q++)
x+=a[q]; //a的因子之和
for(w=0;w<g;w++)
y+=b[w]; //b的因子之和
if(x==y)
printf("%d,%d\n",i,j);
}
}
}
输出结果乱七八糟 而且一直循环 展开
展开全部
大概看了一下,你判断是否为因子的地方有问题,应该用取余运算符号:%
用除号是不行的,呵呵。
另外,你把求一个数的因子和,写成一个函数,这样的话,程序看起来更明了,你也不容易混乱。
求因子和的函数如下:
int sumf(int num)
{
int i,sum = 0;
for(i = 1;i <= num; i ++)
{
if(num % i == 0)
{
sum += i;
}
}
return sum;
}
不过你所说的因子是否包含了1和数本身?如果包含的话,我运行了一下,2到1000好像没发现有满足条件的。
如果不包含1和本身,倒是有几个,全程序是这样:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{ int i;
for(i = 2; i < 1000; i++)
{
//printf("%d--%d--%d\n",i,sumf(i),sumf(sumf(i)));
if(i == sumf(sumf(i)))
{
printf("%d %d\n",i,sumf(i));
}
}
system("pause");
return 0;
}
int sumf(int num)
{
int i,sum = 0;
for(i = 2;i < num; i ++)
{
if(num % i == 0)
{
sum += i;
}
}
return sum;
}
2015-03-13
展开全部
#include<stdio.h>
void main()
{
int i,j,q,s1,s2;
for(i=1;i<=1000;i++)
{
s1=0;
s2=0;
for(j=1;j<=1000;j++)
{
for(q=1;q<=500;q++)
{
if(i%q==0&&i!=q)
s1=s1+q;
if(j%q==0&&j!=q)
s2=s2+q;
}
if(s1==j&&s2==i&&i!=j)
printf("%d,%d\n",i,j);
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询