[C] liczby doskonałe, zaprzyjaźnione

Awatar użytkownika
waliant
Użytkownik
Użytkownik
Posty: 1801
Rejestracja: 9 gru 2010, o 22:16
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 275 razy
Pomógł: 183 razy

[C] liczby doskonałe, zaprzyjaźnione

Post autor: waliant »

Napisz program w C aby wyznaczał wszystkie liczby doskonałe mniejsze od 1000 oraz wszystkie zaprzyjaźnione pary liczb mniejszych niż 1000. dzięki z góry
lemoid
Użytkownik
Użytkownik
Posty: 199
Rejestracja: 24 maja 2012, o 23:36
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 5 razy
Pomógł: 30 razy

[C] liczby doskonałe, zaprzyjaźnione

Post autor: lemoid »

Najtoporniej:
liczby doskonałe

Kod: Zaznacz cały

#include <stdio.h>

int main() {
	int i,j;
	int sumaDzielnikow = 0;
	for(i = 2; i<1001; i++) 
	{
		for(j = 1; j<i; j++) 
		{ 
			if(i%j==0) { sumaDzielnikow+=j;} 
		}

		if (sumaDzielnikow==i) { printf("%d ", i); }
		sumaDzielnikow = 0;
	}

	//return 0;
}
-- 20 mar 2013, o 20:47 --

Kod: Zaznacz cały

#include <stdio.h>

int amicable(int x) {
int sumaDzielnikow = 0;
for (int i=1; i<x; i++) {
if (x%i==0) { sumaDzielnikow+=i; }
}
return sumaDzielnikow;

}

int main() {
for (int i=0; i<10000; i++)
{
if (i==amicable(amicable(i)) && i!=amicable(i)) {  printf("%d %d
", i, amicable(i)); i=amicable(i);}

}

}
Pafeo
Użytkownik
Użytkownik
Posty: 28
Rejestracja: 20 paź 2013, o 15:01
Płeć: Mężczyzna
Lokalizacja: Wrocław

[C] liczby doskonałe, zaprzyjaźnione

Post autor: Pafeo »

Czy mógłby mi ktoś wytłumaczyć co i jak w podpunkcie 2 (liczby zaprzyjaźnione)? Mam takie samo zadanie i o ile część z liczbami doskonałymi rozumiem bez żadnego problemu, to kodu programu do liczb zaprzyjaźnionych nie mogę za nic zrozumieć.
Rozumiem, że ,,i" to kolejne liczby (dzielniki) przez które dzielimy kolejny liczby ,,x" , i jesli x jest podzielne przez i to i dodajemy do sumydzielnikow, którą potem zwracamy przez return. Ale skąd program wie jakie x testujemy? Próbowałem dopisać do tego kodu kolejną pętl for przez pętlą for(int=1 ...) ale program wtedy nie działa.
Nie do końca rozumiem też ostatnią linię kodu, na początku mamy funkcję z funkcji? A w printf co daje nam i=amicable(i)?
Jak widać, mam mase pytań co do tego jednego zadania więc byłbym naprawdę wzdzięczny gdyby ktoś mógłby mi je wytłumaczyć, że tak powiem ,,łopatologicznie". Przepraszam też, jeśli moje pytania są banalne, ale nie potrafiłem nigdzie znaleźć odpowiedzi, a na pomoc wykładowcy również nie mam co liczyć...
Dziękuję za poświęcony mi czas i pozdrawiam.
lemoid
Użytkownik
Użytkownik
Posty: 199
Rejestracja: 24 maja 2012, o 23:36
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 5 razy
Pomógł: 30 razy

[C] liczby doskonałe, zaprzyjaźnione

Post autor: lemoid »

Kod: Zaznacz cały

#include <stdio.h>

int amicable(int x) {
int sumaDzielnikow = 0;
for (int dzielnik=1; dzielnik<x; i++) {
      if (x%dzielnik==0) { sumaDzielnikow+=dzielnik; }  
}
     return sumaDzielnikow;

}

int main() {
for (int i=0; i<10000; i++)
{
     if (i==amicable(amicable(i)) && i!=amicable(i))  // jezeli i jest równe sumie podzielników sumy
        {                                                // swoich podzielników oraz nie jest licz. dosk.
             printf("%d %d
", i, amicable(i));          // to wydrukuj obie te liczby zaprzyjaźnione
              i=amicable(i);                        // przypisz i  wartość liczby jej zaprzyjaźnionej (*)

        }

}

}
(*) obserwacja, że większa liczba z odnalezionej pary jest mniejsza od mniejszej liczby z kolejnej pary liczb zaprzyjaźnionych
ODPOWIEDZ