Проверка дружественности чисел
Добавил: | DMT |
Дата создания: | 3 декабря 2007, 22:56 |
Дата обновления: | 3 декабря 2007, 23:03 |
Просмотров: | 3913 последний 29 ноября, 4:29 |
Комментариев: | 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); } |
