Kezdőoldal » Számítástechnika » Programozás » Tökéletes szám C# kód gondolat...

Tökéletes szám C# kód gondolatmenete?

Figyelt kérdés

Itt van ez a kód ami eldönti hogy egy szám tökéletes vagy sem, és a futás ideje is sokkal jobb mint a sima szám feléig vizsgálósnak, viszont nem egészen értem hogy ez miért és hogyan működik, valami matematikai tétel van a háttérben? Ha valaki esetleg tudja és megosztaná velem annak nagyon örülnék.


long szam = 6;

long osszeg = 1;

for (int i = 2; i <= Math.Sqrt(szam); i++)

{

if (szam % i == 0)

{

osszeg += szam / i + i;

}

}

if (osszeg == szam && szam != 1)

{

Console.WriteLine("Tökéletes");

}

else

{

Console.WriteLine("Nem tökéletes");

}



#programozás #futásidő #C# #tökéletesszám
2020. dec. 10. 18:59
 1/5 anonim ***** válasza:
Csak a szám négyzetgyökéig vizsgálja, cserébe nem csak az i-t, hanem a szám/i-t is hozzáadja az összeghez. Ha végiggondolod, érted hogy miért működik?
2020. dec. 10. 19:47
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:
Nem értem, pont ezért írtam ki a kérdést :D leírnád légyszi
2020. dec. 10. 20:31
 3/5 anonim ***** válasza:

Ha a szám feléig megy a ciklus, és az összeget mindig csak i-vel növeljük, akkor azt is hozzá fogja adni, ami ennél a megoldásnál szám/i, csak nyilván később. A ciklusban a gyöknél jön el az a pont, ahol elkezdődnek ezek a szám/i-k. Ezért ott megállunk, nem adjuk hozzá a szám/i-ket újra. Gondolj bele hol "keresztezi" egymást az i (ami folyton nő) és a szám/i (folyton csökken)? Hát a gyöknél.

Vezesd le mondjuk a 28-ra. A sima megoldásnál úgy adod hozzá, hogy 1-ről indul az összeg, majd 2, 4, 7, 14. Ennél a megoldásnál 1-ről indul, majd plusz 2 és 14, aztán plusz 4 és 7. Elértünk a gyökhöz, megállunk.

2020. dec. 10. 20:41
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:
Köszönöm!!!
2020. dec. 10. 21:37
 5/5 anonim válasza:
Egy apró hiba viszont van a kódban, ugyanis négyzetszám esetén az osztók számához kétszer is hozzáadja a szám négyzetgyökét. (Ha szam/i = i)
2020. dec. 10. 23:08
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!