Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C++: Alkulukujen laskentaa C++

Sivun loppuun

Heikki [30.12.2003 12:21:30]

#

poistettu huonona

tsuriga [31.12.2003 02:11:13]

#

Mitenniin 2 ei ole alkuluku?

Gwaur [31.12.2003 09:10:16]

#

2 on alkuluku.

tejeez [31.12.2003 09:53:41]

#

0 ja 1 eivät ole. 2 on.

Heikki [31.12.2003 11:04:29]

#

Juu... huomasin sen.

Päivitin uuden version, joka ei ole aivan niin tyhmä kuin ensimmäinen versio, ja nopeus moninkertaistui.


Nopeudeltaan ei kyllä ole vieläkään kovin hyvä...

sooda [31.12.2003 11:24:32]

#

toi olisi nopeampi jos se kertoisi aina ~1000 luvun välein että montako on löydetty, ja heittäisi kaikki tiedostoon... mä tein yhden sillä tavalla.

Heikki [02.01.2004 16:45:02]

#

Päivitin taas uuden versio, suurin uudistus on että kertoo kauanko laskentaan kului. Myös tiedostonkäsittelyä mukana.

Anzuhan [02.01.2004 22:37:02]

#

Ei tätä näin kannata tehdä. Aikaa vievä algoritmi ja muutenkin on suositeltavaa käyttää assosiatiivista säiliötä eli std::set, ja käyttää jotain tunnettua ja nopeahkoa seulaa, esmes Eratostheneen.

Anzuhan [02.01.2004 22:37:26]

#

Voisit myös korvata stdio.h ja time.h -> cstdio ja ctime

Heikki [03.01.2004 15:12:58]

#

Olisiko tuosta korvaamisesta käytännön hyötyä?

Heikki [03.01.2004 21:37:51]

#

Noniin.. otin käyttöön noi cstdio ja ctime -kirjastot.

jutti [02.02.2004 13:19:35]

#

lainaus:

for (jaetaa=3; jaetaa<=mahdollinen/2; jaetaa++)

Ilmeisesti algoritmisi yrittää jakaa luvuilla 3, 4, 5, 6, 7, 8, 9...
Oliko se Arkhimedes vai Eratosthenes joka keksi, että pitää kokeilla jakaa luvuilla 2, 3, 5, 7, 11, 13, eli jo löydetyillä alkuluvuilla. Toi sun for-silmukkasi voisi siten olla jotenkin näin:

for (i = 0; alkuluku[i]*alkuluku[i] < mahdollinen; i++)

...eli käytät alkuluku-taulukkoa huolimatta siitä, tulostatko tiedostoon vai ei. Lisäät taulukkoon kaikki löydetyt alkuluvut ja käytät niitä jakajina, kun kokeilet seuraavaa mahdollista.

Ja kokeilu voidaan päättää, kun jakajan neliö >= mahdollinen. Esim kun tutkit lukua 127, eikä jako 12:lla (tai sitä pienemmillä) onnistu, sinun ei tarvitse jatkaa 64:ään asti. 12*12 = 144, mikään suurempi luku kuin 12 ei voi jakaa 127:ää, koska silloinhan olisit jo löytänyt sen. Veikkaan että tämä on nopein mahdollinen algoritmi. Se tosin vaatii aina sen, että etsitään kaikki alkuluvut kakkosesta alkaen.

jutti [02.02.2004 13:23:20]

#

Voi pehveli! En hallitse tätä sivustoa, olisi pitänyt panna jotain kooditageja tuonne. Käytin muuttujaa i ja panin sen hakasulkuihin, jolloin teksti muuttui kursiiviksi. Onkohan tämä oikeamman näköistä:

for (j = 0; alkuluku[j]*alkuluku[j] < mahdollinen; j++)

mamaze [10.03.2004 16:40:17]

#

miks toi loppuu kun kaikki on löydetty?

1 - 10 menee aika kauan ... kokeiliko joku käyttää maksimilukua? kuinka kauan kesti?

hunajavohveli [10.04.2004 15:16:39]

#

Alkulukujahan on loputtomiin. Jos sen muuten tekee sillä periaatteella, että jaetaan jo löydetyillä alkuluvuillahan niin sittenhän ohjelma käy koko ajan sitä hitaammaksi, mitä enemmän on löydetty, koska mitä enemmän on löydetty, sitä kaueamman kestää jakaa. Ainakin tein kerran itse sellainen QB:llä ja oli tietysti paljon hitaampi.

jutti [16.05.2004 23:04:22]

#

Vielä kauemmin kestää jakaa kaikilla kokonaisluvuilla. Jos lukusi on 221, kumpi on nopeampaa? Koettaa jakaa luvuilla 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ja 13 vai luvuilla 2, 3, 5, 7, 11 ja 13? Jos ei voi jakaa 3:lla, ei voi myöskään jakaa 6:lla eikä 9:llä. Näin se vain on.

Fisher [28.05.2004 08:18:15]

#

lainaus:

miks toi loppuu kun kaikki on löydetty?

taas unohtu system("PAUSE").

ilman niitä ei mun mielestä toimi devillä

Heikki [27.06.2004 19:08:01]

#

Ohjelman on tarkoituskin sammua kun laskenta tulee valmiiksi. Tiedot laskennasta tulevat tekstitiedostoon joka ilmestyy exen kanssa samaan hakemistoon.

Jtm [26.12.2004 01:26:33]

#

Btw nopeuttaakseen tota niin kannattaisi tarkistaa onko jakaja vähemmän tai sama kuin annetun luvun neliöjuuri.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta