Cześć, moim zadaniem jest wyznaczenie liczb zaprzyjaźnionych i doskonałych w zakresie do 1000
Liczba doskonała – liczba naturalna, która jest sumą wszystkich swych dzielników właściwych (to znaczy od niej mniejszych). Najmniejszą liczbą doskonałą jest 6, ponieważ 6 = 3 + 2 + 1. Następną jest 28
Liczby zaprzyjaźnione to para różnych liczb naturalnych, takich że suma dzielników właściwych (mniejszych od tej liczby) każdej z tych liczb równa się drugiej
np: 220 = 1 + 2 + 4 + 71 + 142 (dzielniki 284)
284 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 (dzielniki 220)
Gdzie tkwi mój problem?
Znalazłem liczby doskonałe, ale nie potrafię za pomocą zapisanych inforamcji w tablicy wyszukać liczb zaprzyjaźnionych.(jeszcze nie czuję tak dobrze tablic)
wstawiam mój kod:
#include < stdio.h >
#include < math.h >
#define rozmiar 1000
int main() {
int i = 2; // zmienna sterująca 1wszą pętlą
int z = 1; // dzielniki liczb y i
int suma_dzielnikow = 0; // w domyśle bez dzielania n/n
int tablica[rozmiar] = {
0
};
for (i = 2; i <= 1000; i++) /// tutaj zmień na 1000 później
{
suma_dzielnikow = 0; // po to tutaj to jest by suma nizej nie dodawala sie do poprzedniej:
// musi sie zerować po kazdej petli
for (z = 1; z <= i - 1; z++) {
//printf("liczba %d jest dzielona przez %d \n", i,z); ---- > na pewno dziala
if (i % z == 0) {
suma_dzielnikow = suma_dzielnikow + z;
//inicjalizowanie tablicy
tablica[i] = suma_dzielnikow;
}
}
//printf("suma dzielników %d jest równa %d\n",i,suma_dzielnikow);
// printf("element nr %d =%d\n",i,tablica[i]);
}
int suma_liczb_doskonalych = 0;
for (i = 2; i <= 1000; i++) {
if (tablica[i] == i) {
suma_liczb_doskonalych = suma_liczb_doskonalych + 1;
}
}
printf("suma liczb doskonalych jest równa: %d", suma_liczb_doskonalych);
// jeszcze to poprawić
int suma_liczb_zaprzyjaznionych = 0;
int m = 0;
int n = 0;
for (n = 2; n <= 999; n++) {
tablica[n];
for (m = 999; m >= 2; m--)
if (tablica[n] = m) {
suma_liczb_zaprzyjaznionych = suma_liczb_zaprzyjaznionych + 1;
}
}
printf("suma liczb doskonalych jest równa: %d", suma_liczb_zaprzyjaznionych);
return 0;
}
/*if(tablica[n] == m && tablica[m] == n)
{
suma_liczb_zaprzyjaznionych=suma_liczb_zaprzyjaznionych+1;
} */
Tak wiem strasznie się pogubiłem w zaznaczonym fragmencie, ale już na prawdę nie mam już pomysłu na to jak to doprowadzić do porządku