Tökéletes szám C# kód gondolatmenete?
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");
}
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!