Tekisi mieli kirjoittaa koodi, joka laskee alkulukuja. Onnsituuko excelillä?
Apuja vinkkejä kiitos!
Alkulukuja
6
1350
Vastaukset
Onnistuu millä tahansa ohjelmointikielellä.
Ei ole Exceliä eikä Visual Basiccia tässä, mutta C:n sukuisten kielten syntaksilla kahden luvun suurimman yhteisen tekijän saisi sievennettyä näinkin siistiksi:
while (tmp = i1 % i2) { i1 = i2; i2 = tmp; }
return i2;
Ja tässä sitten i1 pitää olla suurempi kuin i2. Jos i2 on 1, kyseessä on alkuluku. Jos C kielen syntaksi ei ole tuttu niin % on jakojäännös operaattori.
En yleensä ala mitään neuvomaan toisilla kielillä mitä kysytään mutta tämä on sen verran yksinkertainen juttu, että tuosta varmaan tajuaa vaikka olisikin vieras syntaksi.- Petri_Petri
Ihan näppärä tapa selvittää kahden luvun pienin jaettava. Mutta kun sitä ei kysytty vaan kysyttiin alkuluvuista. Ja koodin sievennys ei tarkoita että yhdelle riville tungetaan useampi käsky.
Kysyjä varmaankin on tekemässä ohjelmaa koulun tehtävänä, jolloin olisi parempi itse funtsia asiaa. Mutta minä nyt malliksi väsäsin sen Visual Basic 2008:lla.
Seuraava funktio selvittää onko kyseessä alkuluku. Luku jaetaan pienemmillä luvuilla kunnes löytyy pienin yhteinen jaettava.
Function OnkoAlkuluku(ByVal Nro As Integer)
Dim i As Integer
For i = 2 To Nro - 1
If (Nro Mod i) = 0 Then
'jakojäännös on nolla joten ei alkuluku
Return i'palautetaan pienin jaettava
End If
Next
'on alkuluku, palautetaan 0
Return 0
End Function
'varsinainen ohjelmakoodi tarkastaa 1000 ensimmäistä lukua
'ja ilmoittaa alkuluvut TextBox1-tekstikentässä (multiline=true)
Dim Nro As Integer
Dim PieninJaettava As Integer
Dim Enter = Chr(13) Chr(10) 'rivinsiirto tekstissä
Me.TextBox1.Text = ""
For Nro = 1 To 1000
PieninJaettava = OnkoAlkuluku(Nro)
If PieninJaettava = 0 Then
Me.TextBox1.Text = Nro & " on alkuluku" & Enter
Else
'ei ole alkuluku
End If
Next - puu puu pukari
Petri_Petri kirjoitti:
Ihan näppärä tapa selvittää kahden luvun pienin jaettava. Mutta kun sitä ei kysytty vaan kysyttiin alkuluvuista. Ja koodin sievennys ei tarkoita että yhdelle riville tungetaan useampi käsky.
Kysyjä varmaankin on tekemässä ohjelmaa koulun tehtävänä, jolloin olisi parempi itse funtsia asiaa. Mutta minä nyt malliksi väsäsin sen Visual Basic 2008:lla.
Seuraava funktio selvittää onko kyseessä alkuluku. Luku jaetaan pienemmillä luvuilla kunnes löytyy pienin yhteinen jaettava.
Function OnkoAlkuluku(ByVal Nro As Integer)
Dim i As Integer
For i = 2 To Nro - 1
If (Nro Mod i) = 0 Then
'jakojäännös on nolla joten ei alkuluku
Return i'palautetaan pienin jaettava
End If
Next
'on alkuluku, palautetaan 0
Return 0
End Function
'varsinainen ohjelmakoodi tarkastaa 1000 ensimmäistä lukua
'ja ilmoittaa alkuluvut TextBox1-tekstikentässä (multiline=true)
Dim Nro As Integer
Dim PieninJaettava As Integer
Dim Enter = Chr(13) Chr(10) 'rivinsiirto tekstissä
Me.TextBox1.Text = ""
For Nro = 1 To 1000
PieninJaettava = OnkoAlkuluku(Nro)
If PieninJaettava = 0 Then
Me.TextBox1.Text = Nro & " on alkuluku" & Enter
Else
'ei ole alkuluku
End If
Nextihan hyvä jos kysyjä itse funtsisikin asiaa, tuo Petri_Petrin ehdotus ei ehkä ihan tehokkaimmasta päästä ole: esim. tutkii onko jaollinen 'pienemmillä luvuilla' For i = 2 To Nro - 1 - riittäisikö jokin pienempi yläraja jne ...
- Petri_Petri
puu puu pukari kirjoitti:
ihan hyvä jos kysyjä itse funtsisikin asiaa, tuo Petri_Petrin ehdotus ei ehkä ihan tehokkaimmasta päästä ole: esim. tutkii onko jaollinen 'pienemmillä luvuilla' For i = 2 To Nro - 1 - riittäisikö jokin pienempi yläraja jne ...
No joo. Nopeasti väsäsin eikä tullut mieleen. Tosin vain alkulukujen kanssa käydään turhaan loppupuolisko läpi.
Tietysti homma nopeutuisi vielä paljon enemmän jos edelliset alkuluvut pantaisiin taulukkoon ja tarkastetaan vain ne.
Nyt (vasta) hain kuuklella ja se (tietysti) löysi valmista koodia. Esim. Eratosthenes:in seula http://users.tkk.fi/~t106216/luennot/kalvot11_02_2004.html
- eseula
Yksi idea, mikä taitaa olla juuri tuo E:n seula on seuraavankaltainen: 1. Tee n-mittainen taulukko, joka alustetaan arvoihin true (tai 1, miten vaan). 2. Lähde liikkeelle kohdasta 2 ja merkitse joka toinen taulukon alkio tuon 2:n jälkeen falseksi (tai nollaksi). Siis ensimmäinen nollattu on 4, sitten 6 jne. 3. Tee sama juttu joka kolmannelle lähtien kohdasta 3 3=6. 4. Sama juttu joka neljännelle lähtien kohdasta 4 4=8. 5. jne. Neliöjuuri n:n kohdalla tulosta kaikki indeksit, jotka ovat vielä true-arvoisia. Tätä voi vielä optimoida sillä tavalla, että jos vaikka kohta 4 oli jo false, niin sen yli ei tarvise luupata.
Ketjusta on poistettu 1 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Valtion alijäämä = yritystukien määrä = 10 mrd. euroa
Mutta persut eivät vaan suostu tasapainottamaan valtion budjettia, vaikka yritystuet on tiedetty haitallisiksi. Miksi p977393Suomi käyttää sosiaalietuuksiin suhteessa eniten rahaa koko maailmassa
Suomi käyttää sosiaaliturvaetuuksiin enemmän rahaa suhteessa bruttokansantuotteeseen kuin mikään muu maa maailmassa. Su3636483Grahn-Laasonen: "Kansalainen joutuu pettymään, jos demareita äänestää"
Ministeri viittaa tuoreeseen Helsingin Sanomien juttuun, jossa demarijohtajan keinoja Suomen suunnan muuttamiseksi esite613834Vähän fiksumpi Nimi kisa ? :=)
Kirjoita teidän etunimet allekkain. Jos nimissä on joku kirjain sama, poista se. Tee sama tarkistus kaikille kirjaimill293569Mikä on suurin luonne- eroavuus sinussa
Ja kaivatussasi? Vaikuttaako se huonoon vai hyvään suuntaan siinä, että teistä voisi tulla jotain?1922041Kenen haluaisit voittavan Amazing Racen: Tuomas ja Esko, Millu ja Karoliina vai Maria ja Vilma?
Amazing Race Suomi huipentuu lauantaina finaaliin. Jäljellä on kolme paria ja tiedossa on tehtäviä, jotka järkyttävät os181763- 611501
Gallup: Katsotko Salkkareita tai oletko katsonut?
Salatut elämät on suomalaisten suosikkisarja vuosikymmenestä toiseen. Salkkareiden parissa viettää aikaa sukupolvet laps181476Elämäni biisi starttaa uudessa muodossa - Voi olla pettymys faneille!
Elämäni biisi ja juontaja Katja Ståhl ovat suomalaisten suosikkeja. Lauantai-iltaisin ohjelma on vetänyt tv-katsojat arv11370Amazing Race Tomas rehellisenä Esko-appiukon, 63, tilasta: "Sairastelut ja..."
Tomas Grekov ja Esko Rotola-Pukkila ovat mukana Amazing Race Suomi -kisassa. Ja nyt vuorossa on finaali. Hankaluuksia m11357