帮忙纠错,初学c语言,希望今天得到答案,谢谢

Python018

帮忙纠错,初学c语言,希望今天得到答案,谢谢,第1张

你的这个程序是求亲和数的,整体上的思路是对的,只是忘了一点,sum1和sum2,在每次循环前都要重新赋值为1。否则是得不到任何的亲和数。

我改了一下,用的是1200,6000时间运行长了。

#include "iostream.h"

#include "iomanip.h"

void main ()

{

int x,m,sum1=1,sum2=1,y,n

cout<<"The friendly-numbers pair: "<<endl

for (x=2x<=1220x++)

{

sum1=1

for (m=2m<=x/2m++)

if (x%m==0)

sum1=sum1+m

for (y=x+1y<=1220y++)

{

sum2=1

for (n=2n<=y/2n++)

if (y%n==0)

sum2=sum2+n

if (x==sum2 &&y==sum1)

cout<<setw(5)<<x<<"--"<<y<<endl

}

}

}

而且我把求x的真因素提到了外面,可以节省些时间,不必每次求一次x的真因素,再求y的真因素。

结果:

220——284

1184——1210

二楼有一点错误,改一下 if(y==n&&x<y) printf("%d %d\n",y,x)

vc2008

// 亲和数.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <stdio.h>

void main()

{

unsigned long a,b

unsigned long n

unsigned long x,y

unsigned long i

scanf("%ld%ld",&a,&b)

for(n=an<=bn++)

{

x=0

for(i=1i<=n/2i++)

{

if(n%i==0) x+=i

}

y=0

for(i=1i<=x/2i++)

{

if(x%i==0) y+=i

}

if(y==n&&x<y) printf("%d %d\n",y,x)

}

while(1)

}