Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
Mam za úkol napsat program, který pro zadané kladné n vypíše všechna spřátelená čísla.
Spřátelená čísla jsou čísla, jejichž součet všech dělitelů je roven tomu druhému číslu a naopak.
Například pro n =1000 jsou to čísla 220 a 284.
Nedaří se mi pořád nalézt algoritmus, jak tato císla najít. Díky za každou nápovědu. :)
Offline
MartinK napsal(a):
Mam za úkol napsat program, který pro zadané kladné n vypíše všechna spřátelená čísla.
Spřátelená čísla jsou čísla, jejichž součet všech dělitelů je roven tomu druhému číslu a naopak.
Například pro n =1000 jsou to čísla 220 a 284.
Nedaří se mi pořád nalézt algoritmus, jak tato císla najít. Díky za každou nápovědu. :)
Ahoj. Nevidím, jak v definici spřátelného čísla figuruje číslo n. Když jsou 220 a 284 sprátelená - jakou roli v tom hraje číslo 1000?
Offline
↑ check_drummer:
Jasně to jsem se vyjádřil nejasně :) To n je omezení pro vypisování těch spřátelenejch čísel. Takže
jak jsem uvedl nahoře po číslo 1000 se vypíše 220 a 284.
Offline
↑ MartinK:
Takže se hledají spřátelená čísla takové, aby obě byla menší než n?
Tak začni takto:
Umíš sestrojit algoritmus, který zjistí všechny dělitele daného čísla k?
Offline
↑ check_drummer:
To bych asi udelal takhle:
v jazyku C:
int a=nejake cislo , i=1;
while(a>i)
{
if(a%i==0)
{
printf("%d\n", i);/*to znamená, že si je postupně vypíšu, abych si udělal kontrolu jestli jsem je našel správně*/
}
i++;
}
Offline
↑ MartinK:
Tak by to šlo. Teď je jen místo vypisování přičteš k nějakému čítači a máš součet dělitelů - a pro ten aplikuješ ten samý postup a zjistíš, zda ti vyšlo opět číslo a.
Jinak ten tvůj cyklus lze vylepšit - např. 1 je dělitelem vždy, takže můžeš začít od 2ky a pokud x dělí a, pak ho dělí i a/x, tak můžeš ten cyklus jet jen do odmocniny z a.
Offline
↑ check_drummer:
Pomocí té odmocniny se to generování docela zrychlilo. Ale pořád to není dostatečně rychlé, abych dostal bonusové body za ten úkol. :)
Díky za radu.
Offline