Tökéletes szám keresés C#-ban?
Van egy alap kódom ami eldönti egy számról hogy tökéletes-e vagy sem, egészen 33550336-ig gyorsan működik azonban a következő tökéletes számot már nagyon-nagyon lassan számítja, konkrétan türelmem se volt végig várni mire kiírja az eredményt.Van valakinek esetleg valami ötlete hogy hogyan lehetne megcsinálni azt, hogy a nagyobb számokról is viszonylag gyorsan, ne 2 nap alatt döntse el hogy tökéletesek vagy sem?
int osszeg = 0;
long szam = long.Parse(Console.ReadLine());
for (int i = 1; i <= szam/2; i++)
{
if(szam%i==0)
{
osszeg = osszeg + i;
}
}
if (osszeg == szam)
{
Console.WriteLine("Tökéletes szám");
}
else
{
Console.WriteLine("Nem tökéletes zám");
}
Console.ReadLine();
Egyébként tényleg kevés ismert tökéletes szám van, 51, így tényleg elég, ha csak felveszed őket egy halmazba és a program megnézi, hogy benne van-e.
Ennek pedig a következő az oka:
1) Ha csak annyi a célod, hogy írj egy programot, ami eldönti egy számról, hogy tökéletes-e, akkor azt megoldottad.
2) Ha az a célod, hogy új tökéletes számot találj, hát...Az nagyjából esélytelen ilyen módszerrel. Ez egy elég kutatott terület.
Kis érdekesség: Minden páros tökéletes szám (2^n - 1)*2^(n-1) alakú.
És ha ez tökéletes szám, akkor 2^n - 1 pedig prím.
A legnagyobb ismert tökéletes szám esetén n=82 589 933.
Az pedig nem ismert, hogy van-e páratlan tökéletes szám, mint ahogy az sem, hogy végtelen sok van-e.
„Kifejezetten kevés ismert perfect number van amúgy, akár egy setbe is felveheted őket.”
„Egyébként tényleg kevés ismert tökéletes szám van, 51, így tényleg elég, ha csak felveszed őket egy halmazba és a program megnézi, hogy benne van-e.”
Könnyek szöknek a szemembe, üzen a múlt... Három éve ennek a nyilvánvalóan hasznos gyakorlati megközelítésnek még a gondolatáért is lehülyéztek minket, mert a kiszámolás mellett ennek is meg mertük említeni a lehetőségét. Azóta értelmesebb embertársaink följebb pontoztak már, de érdekes lehet elolvasni:
https://www.gyakorikerdesek.hu/szamitastechnika__programozas..
Talán GPU-ra átírva lenne gyorsabb. Főleg a keresésben a sokszálúság miatt (azaz hogy rengetet candidate-et tesztelne párhuzamosan)
"Kicsit" ritkák
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!