Matematické Fórum

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

#1 23. 10. 2011 14:24

MartinK
Místo: Aš - Cheb
Příspěvky: 234
Reputace:   16 
 

Spřátelená čísla

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

  • (téma jako vyřešené označil(a) MartinK)

#2 23. 10. 2011 14:45

check_drummer
Příspěvky: 5503
Reputace:   106 
 

Re: Spřátelená čísla

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?


"Máte úhel beta." "No to nemám."

Offline

 

#3 23. 10. 2011 20:51

MartinK
Místo: Aš - Cheb
Příspěvky: 234
Reputace:   16 
 

Re: Spřátelená čísla

↑ 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

 

#4 23. 10. 2011 21:54

check_drummer
Příspěvky: 5503
Reputace:   106 
 

Re: Spřátelená čísla

↑ 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?


"Máte úhel beta." "No to nemám."

Offline

 

#5 23. 10. 2011 22:13 — Editoval MartinK (23. 10. 2011 22:14)

MartinK
Místo: Aš - Cheb
Příspěvky: 234
Reputace:   16 
 

Re: Spřátelená čísla

↑ 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

 

#6 24. 10. 2011 18:12

check_drummer
Příspěvky: 5503
Reputace:   106 
 

Re: Spřátelená čísla

↑ 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.


"Máte úhel beta." "No to nemám."

Offline

 

#7 26. 10. 2011 10:13

MartinK
Místo: Aš - Cheb
Příspěvky: 234
Reputace:   16 
 

Re: Spřátelená čísla

↑ 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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson