Alkulukuja

excelillä

Tekisi mieli kirjoittaa koodi, joka laskee alkulukuja. Onnsituuko excelillä?
Apuja vinkkejä kiitos!

6

1372

    Vastaukset 6

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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
        Next

        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 ...


      • 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

    1. Gallup: Kansalaiset eivät usko velkajarruun

      Puolet suomalaisista ei usko velkajarrun vaatimien sopeutusten toteutuvan, kertoo Iro Researchin kyselytutkimus. Kokoom
      Maailman menoa
      119
      1295
    2. Mä oon kallistumassa

      Rikosilmoitukseen!
      Suhteet
      228
      1049
    3. Ethän mies vielä

      luovu meistä? Haluaisin jo sun syliin.
      Ikävä
      67
      980
    4. Haaveilen edelleen

      Sinusta aika ajoin
      Ikävä
      58
      942
    5. Sinulle nainen

      En ehkä koskaan osannut sanoa tätä oikein. Minun vaikeuteni luottaa liittyi ennen kaikkea menettämisen pelkoon. Siihen
      Ikävä
      66
      906
    6. Martsusta tuli leuhka

      Ja ylimielinen. Hän ei nosta persettäkään ilmaseksi . Luulempa et nämä ei tee hyvää hyvinvointivalmennuksille.... Nannal
      Kotimaiset julkkisjuorut
      250
      860
    7. Kuisla Group Oy jättänyt yrityssaneeraushakemuksen

      Samalla yrityssaneeraukseen on hakeutunut Kuisla henkilökohtaisesti ja Seinäjoen Motelli Oy, joka omistaa Sorsanpesän ki
      Seinäjoki
      36
      788
    8. Hei rakkaani.

      Kohtaaminen lähestyy. Miten teemme sen? Kumpi ottaa yhteyttä vai törmäämmekö jossain sattumalta? Tuleva vaimosi
      Ikävä
      70
      775
    9. Ethän voinut nainen tietää, että rikot rikotun

      Omaa elämää taas mietin aamuyön tunteina. En vieläkään löytänyt muistin sokkeloista ainuttakaan onnen hetkeä. Kaipuu on
      Ikävä
      72
      762
    10. Tiedätkö sitä

      Että sinun äänesi on ihanan pehmeä
      Ikävä
      42
      726
    11. Uskallanko laittaa sulle viestiä?

      Se viesti on tossa valmiina ja lähettämistä vaille valmis. Kun ei kauhee sti tunneta niin eipä sillä olisi niin väliä. S
      Ikävä
      58
      690
    12. On paha olla

      Kun olen käyttäytynyt aiemmin kaivattua kohtaan kuin joku narsisti.
      Ikävä
      65
      668
    13. Kiulu myynnissä!

      Kiulu hakee taas uutta yrittäjää. https://www.yritysporssi.fi/etela-pohjanmaa-lansi-suomi-finland/myytavat/yritykset/ma
      Ähtäri
      26
      608
    14. Tulisiko naisille asettaa korkeammat eläkemaksut

      Tämä tuli mieleeni kun luin aamun lööppejä. Japanissa alkaa olla "uutta nuorisoa" ihan urakalla, ikä alkaa sadan jälkeen
      Sinkut
      181
      513
    15. Onko nyt kaikki asiat käyty läpi?

      Mun mielestä on👍
      Ikävä
      73
      508
    16. Et pysty peittämään minulta

      Sinä olet hyvä peittämään asioita niin halutessasi. Pystyt pitkiäkin aikoja salaamaan juttuja. Juuri mietin tuossa, olet
      Ikävä
      47
      504
    17. Mies joka on oikeasti kiinnostunut

      Ja näkee sut pitkäaikaisena kumppanina, siirtää vaikka vuoria selvittääkseen asiat eikä ota pienintäkään riskiä menettää
      Ikävä
      106
      498
    18. Mikä tekee kaivatustasi

      Haluttavan?
      Ikävä
      18
      488
    19. Mitä oikein tapahtui? Maajussi-Jetta sai tylyt pakit - Sulhoehdokas selittää: "Ei lentänyt kipinät"

      Maajussille morsian -sarjassa etsitään rakkautta ja rinnalle kumppania. Yksi maajusseista on Jetta - liikunnallinen ja
      Maajussille morsian
      12
      487
    20. Vieläkin saat

      Sydämen tykyttämään. Vaikka emme näe
      Ikävä
      24
      484
    Aihe