Kezdőoldal » Számítástechnika » Programozás » Miért ez a leggyorsabb módja...

Miért ez a leggyorsabb módja a prím vizsgálatnak?

Figyelt kérdés

Sziasztok!

A leggyorsabb módja (ahogy én olvastam) a prímszámnak vizsgálatnak az, hogyha a ciklust 3-tól indítjuk és egészen a bekért ("vizsgált", melyet nevezzünk most n-nek) szám négyzetgyökéig fut. A kérdésem az, hogy miért?

Tehát:

int root = (int)Math.Sqrt((double)n);

for (int i = 3; i <= root; i += 2)

{

if (n % i == 0) return false;

}


A válaszokat előre is köszönöm! :)



2016. jún. 29. 16:40
 1/10 anonim ***** válasza:

[link]


Az a kasztolásos valami meg borzalmas.

2016. jún. 29. 16:54
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
Mert ha a számnak van a saját négyzetgyökénél nagyobb osztója is, akkor van kisebb osztója is (amivel beszorozva megkapjuk a számot), ezért fölösleges a négyzetgyökénél tovább vizsgálni.
2016. jún. 29. 16:55
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:

Mert egy szám gyökénél nagyobb számot egy annál kisebbel kell szorozni, hogy kiadja a számot, tehát nem fogunk találni a gyökénél nagyobb olyan számpárt, amik szorzata a szám lenne.


Mondjuk a 16-ot vizsgáljuk. A lehetséges szorzatok (párok):

1*16

2*8

4*4

8*2

16*1


Vagyis ha 4-ig (gyök 16-ig) eljutottunk, akkor már csak ugyanazok a számok jönnek fel, csak más sorrendben.

2016. jún. 29. 16:55
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:
100%

Természetesen nem ez a leggyorsabb módja a prím vizsgálatnak.

Ez csak egy nagyon nagyon egyszerű, kezdők számára is érthető algoritmus, amiben van minimális optimalizáció.

2016. jún. 29. 17:01
Hasznos számodra ez a válasz?
 5/10 anonim ***** válasza:
Igen, talán ez nem is a prímvizsgálatra jó példa, hanem a prímtényezős felbontásra.
2016. jún. 29. 17:06
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:
Amit írtál, ha jól nézem, 4-re kapásból prímet írna, ugye?
2016. jún. 29. 21:54
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:

#6: Nem, mert nincs return true;

lehet ez lenne az utolsósorban:

return i == 2 || (i > 1 && (i % 2 == 1));

2016. jún. 29. 22:51
Hasznos számodra ez a válasz?
 8/10 anonim ***** válasza:

Hát az i 3-tól indul és kettesével növekszik, szóval az or második fele igaz, nem?

Illetve mivel tényleg 3-tól indul, az i nem is lehet 2.

Tehát ez egy return true.


Másrészt az i lokális a for-ra nézve, tehát nem is fordul, amit írtál, vagy ha fordul, akkor szemantikai hiba.

2016. jún. 29. 23:30
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:
Bocs, de gondopom mit akartam írni, cseréld ki "n"-re:P
2016. jún. 30. 08:29
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:
*gondolom tudod
2016. jún. 30. 08:32
Hasznos számodra ez a válasz?

Kapcsolódó 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!