Проверка дружественности чисел


Добавил:DMT
Дата создания:3 декабря 2007, 22:56
Дата обновления:3 декабря 2007, 23:03
Просмотров:3947 последний позавчера, 0:44
Комментариев: 0

Дружественными числами называются числа, у которых сумма делителей первого числа равна второму числу и сумма делителей второго числа равна первому числу.

Метод и его модификации:

1)

#include <stdio.h>

#include <conio.h>

void proverka (int i,int sum1,int sum2,int j,int n1,int n2,int *mass1,int *mass2)

{

if (sum2==i && sum2!=0 && sum2<sum1)

{

for (j=0;j<n2;j++) printf ("%d ",mass2[j]);

printf (" Summa1=%d\n\r\r",sum2);

for (j=0;j<n1;j++) printf ("%d ",mass1[j]);

printf (" Summa2=%d",sum1);

printf ("\n--------------------------------------------------------------------------------");

}

}

void friends (int start, int end)

{

int i,j;

int n1=0,n2=0;//номер заполненого элементами

int mass1[50],mass2[50];

int sum1=0,sum2=0;

for (i=start;i<end;i++) //с первого до предпоследнего

{

for (j=1;j<=i/2;j++) //заносим в массив делители первого числа

if (i%j==0)

{

mass1[n1++]=j;

sum1+=j;

}

for (int j1=1;j1<sum1;j1++) //заносим в массив делители второго числа

if (sum1%j1==0)

{

mass2[n2++]=j1;

sum2+=j1;

}

proverka (i,sum1,sum2,j,n1,n2,mass1,mass2);

n1=0;n2=0;sum1=0;sum2=0;

}

}

void main (void)

{

clrscr();

friends(1,1250);

}

 

2)

#include <stdio.h>

#include <conio.h>

void proverka (int i,int sum1,int sum2)

{

if (sum2==i && sum2!=0 && sum2<sum1)

{

printf (" Summa1=%d\n",sum2);

printf (" Summa2=%d",sum1);

printf ("\n\n");

}

}

void friends (int start, int end)

{

int i,j;

int sum1=0,sum2=0;

for (i=start;i<end;i++)

{

for (j=1;j<=i/2;j++)

if (i%j==0)

{sum1+=j;}

for (int j1=1;j1<sum1;j1++)

if (sum1%j1==0)

{sum2+=j1;}

proverka (i,sum1,sum2);

sum1=0;sum2=0;

}

}

void main (void)

{

clrscr();

friends(1,1250);

}

 

3)

#include <stdio.h>

#include <conio.h>

void proverka (int i,int sum1,int sum2)

{

if (sum2==i && sum2 && sum2<sum1)

{

printf (" Summa1=%d\n",sum2);

printf (" Summa2=%d",sum1);

printf ("\n\n");

}

}

void friends (int start, int end)

{

int i,j;

int sum1=0,sum2=0;

for (i=start;i<end;i++)

{

for (j=1;j<=i/2;j++)

if (i%j==0)

{sum1+=j;}

if ( (i%2==0 && sum1%2==0) || (i%2!=0 && sum1%2!=0) )

{

for (int j1=1;j1<sum1;j1++)

if (sum1%j1==0)

{sum2+=j1;}

proverka(i,sum1,sum2);

}

sum1=0;sum2=0;

}

}

void main (void)

{

clrscr();

friends (1,1250);

}

up