[C] liczby doskonałe, zaprzyjaźnione
- waliant
- 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
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
-
- 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
Najtoporniej:
liczby doskonałe-- 20 mar 2013, o 20:47 --
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;
}
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);}
}
}
[C] liczby doskonałe, zaprzyjaźnione
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.
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.
-
- 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
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 (*)
}
}
}