MIKKO RAHIKKA

The electrical things have their lives too, paltry as those lives are.


Joka toinen, joka kuudes, joka kolmaskymmenes?

Edellisessä tarinassani pohdin, millä todennäköisyydellä kahdella satunnaisesti valitulla luvulla ei ole yhteisiä tekijöitä. Tässä tutkiskelen kuvaajissa näkyviä hahmoja.

Kun katsoo edellisen artikkelin GeoGebra-kuvia, niin näkee, että joillain a:n arvoilla pisteitä on vähemmän ja joillain enemmän. Kun a on alkuluku, niin tällöin tietysti pisteitä on enemmän. 

Seuraavassa kuvassa on pisteparit (a, b) merkitty, jos niillä ei ole yhteisiä tekijöitä, kun a ja b saavat kaikki arvot 1, 2, …, N. Tässä N = 100. Joillain a:n arvoilla (ja tietysti samoilla b:n arvoilla) pisteitä on paljon, joillain vähemmän. Pysty- ja vaakasuunnassa näkyy suoria, joissa on paljon pisteitä ja suoria, joissa pisteitä on vähemmän.

Kuvaajassa on pistemäisiä merkintöjä, jotka esittävät lukuparien (a, b) suhteita, kun a ja b ovat arvoja 1 - 100. Pisteet on merkitty eri väreillä osoittamaan, että niillä ei ole yhteisiä tekijöitä.

Laskin GeoGebralla kutakin a:n arvoa vastaavien pisteiden lukumäärän ja piirsin tuloksesta pylväsdiagrammin, kun N = 200.

Pylväsdiagrammi (N=200), joka näyttää kuinka monella (a,b) lukupaarilla ei ole yhteisiä tekijöitä.

Kuvaajasta näkee, että joka kuudes tolppa näyttäisi olevan matalammalla kuin muut. Lisäksi joka 30. näyttäisi olevan erityisen matala tolppa. Tietysti myös joka toinen eli parilliset luvut tuottavat matalampia tolppia verrattuna parittomiin.

Tässä vaiheessa siirryin tutkimaan ongelmaa Pythonin avulla. Koodaaminen on suht’koht’ nopeaa varsinkin, kun käyttää tekoälyä apuna. Vaihdoin myös kuvaajien otsikot englanninkielisiksi, en kelpuuttanut Gemini-AI:n suomenkielisiä versioita. Toisaalta tuo coprime on mukavan lyhyt verratuna ”keskenään jaottomiin lukuihin” tai ”lukuparit, joilla ei ole yhteisiä tekijöitä”.

Seuraavasta kuvaajasta havaitaan, että joka kuudes arvo on suuruusluokkaa 200 tai jonkin verran alle ja joka kolmaskymmenes noin 160. 

Kuvaaja näyttää coprime-pareja (a, b) jokaiselle a:n arvolle, kun N = 600. Pystyakselilla on coprime b -arvojen määrä ja vaaka-akselilla a:n arvot.

Seuraavassa kuvassa on mukana vai joka kuudes: 6, 12, 18, … Tässä havaitaan uusi kummallisuus 210!

Scatter plot showing the number of coprime pairs (a, b) for every sixth value of a, with N set to 600. The x-axis represents the values of a, while the y-axis indicates the count of coprime b values.

Tutkitaan vielä suuremmilla N:n arvoilla. 

Kuvaaja, joka esittää koprimääräparien (a, b) lukumäärän eri a-arvoille, N=3000. X-akselilla a-arvot ja Y-akselilla koprimääräisten b-arvojen lukumäärä.
Kuvaaja, joka esittää coprime-parien (a, b) määrän jokaiselle kuudennelle a:n arvolla, kun N = 3000.

Hypoteesi 210:lla jaollisista luvuista pitänee paikkansa.

Scatter plot showing the ratio of coprime pairs (a, b) for every sixth value of a with N set to 3000. The x-axis represents the values of a, while the y-axis indicates the corresponding ratio of coprime b values.

Tässä vaiheessa havaitaan, että 2310 tuottaaa pieniä arvoja suhteeseen. Kokeillaan.

Kuvaaja, joka näyttää koprimaariparien (a, b) lukumäärän eri arvoille a:lle, kun N = 20000.
Kuvaaja, joka esittää coprime-parien (a, b) suhdetta jokaiselle kuudennelle a:n arvolla, kun N = 20000.

Tässä vaiheessa laskenta-aika alkaa olla isohko. Jätän kokeilemisen tässä vaiheessa tähän. Nyt pitäisi oikeasti alkaa pohtia ongelmia.

Ongelma 1. Miksi kuudella jaollisilla luvuilla on suhteellisen vähän sellaisia lukuja, joiden kanssa niillä ei ole yhteisiä tekijöitä?

Ongelma 2. Miksi luvuilla 30, 210 ja 2310 jaolliset luvut ovat sellaisia, että niillä on aika vähän sellaisia lukuja, joiden kanssa niillä ei ole yhteisiä tekijöitä?

Arvaan/tiedän, että seuraava tällainen luku on 30030.

pari pythonin sympy-funktiota

Tässä vaiheessa tarinaa pitää ottaa käyttöön pari alkulukuihin liittyvää funktiota: prime ja primorial. Molemmat funktiot löytyvät Pythonin SymPy-moduulista. On hyvä huomata, että ylioppilaskokeen Pythonissa ei ole SymPy-kirjastoa, tosin taitava koodari ohjelmoi funktiot helposti itsekin.

Funktio prime(n) tuottaa n:n alkuluvun.

Python-koodi, joka käyttää SymPy-kirjaston prime-funktiota ja tulostaa ensimmäisten kuuden alkuluvun arvot. Koodissa näkyy silmukka, joka käy läpi arvot 1-5.

 Koulumatikasta tuttu funktio on kertoma. Kertoma(n) = factorial(n) = n! on lukujen 1, 2, 3, … n tulo. Niinpä 5! = 1*2*3*4*5=120. Primorial on vastaava funktio kuin kertoma, mutta tuloon otetaan vain alkulukuja.

Primorial(n) on n:n ensimmäisen alkuluvun tulo. Näin ollen primorial(5) = 2*3*5*7*11 = 2310.

Kuvassa Python-koodi, joka tuo esiin SymPy-moduulin primorial-funktion käytön. Koodi laskee primorial(5) ja tuloksen, 2310, tulostaminen.

Primorial-funktiota merkitään usein kertoman tapaan #-merkinnällä, 3# = 2*3*5 = 30.

jatketaan laskentaa

Nuo edellä ilmaantuneet luvut 2, 6, 30, 210 ovat ensimmäisten alkulukujen tuloja eli n#:n arvoja.

Valitsin N:n arvoksi 8# = 9699690. Laskin keskenään jaottomien lukuparien (a, b) lukumäärän ja jaoin sen N:n arvolla  9699690. Näin sain laskettua kyseisillä luvuilla keskenään jaottomien lukuparien (a, b) suhteellisen osuuden, kun a = n#.

Taulukko, jossa on sarakkeet n, primorial(n) ja koprimien määrä / primorial(8) eri n-arvoille.

Alempaa kuvaajaa tuottaessani laskin suhdeluvun vain luvun n# arvoon saakka, edellisessä taulukossa kutakin n:ää kohden laskin arvoon 8#. Molemmissa tapauksissa tuli sama tulos.

Pylväsdiagrammi, joka esittää suhteellista osuutta coprime-luvuista verrattuna n#-arvoon, muutaman ensimmäisen n arvon osalta.

Mitä nuo suhteen arvot ovat? Kun taulukkoa ja (a, b) parien jaollisuutta pohtii hetken, niin mieleen saattaa juolahtaa, että suhde saadaan käyttämällä todennäköisyyslaskennasta tuttua komplementtien tuloa tyyliin. 

Kaavassa esitetään P(4) laskentaprosessi, jossa kerrotaan todennäköisyydet, että satunnaisesti valituilla luvuilla ei ole yhteisiä tekijöitä.

Lasketaan Pythonilla vastaavia arvoa. Sarakkeella suhde on laskettu komplementtien tulo edellä esitetyllä tavalla.

Taulukko, jossa on kaksi saraketta: 'n' ja 'suhde', esittäen suhteellisia arvoja eri n-arvoille.

Ongelma 3. Todista. Tutkitaan lukupareja (a, b), missä a ja b saavat kaikki arvot 1, 2, …, N. Lasketaan niiden lukuparien (a, b) lukumäärä, joilla ei ole yhteisiä tekijöitä keskenään eli SYT(a, b) = 1 ja jaetaan tämä lukumäärä luvulla N#. Jos a saa arvot 1#, 2#, 3#, …, n#, niin kyseinen suhde on suuruudeltaan

Matemaattinen kaava, joka esittää P(n) -funktion, jossa käytetään alkulukufunktiota.

Kaavassa luku M on n:s alkuluku. Toinen tapa esittää asia olisi kysyä: Millä todennäköisyydellä satunnaisesti valittu luku ei ole jaollinen luvulla n#, kun n saa arvot 1, 2, 3, …?

Mitäköhän tuolle P(n):n arvolle tapahtuu, kun n kasvaa isoksi? Lähestyykö tulo jotain nollaa suurempaa lukua kohden vai onko raja-arvo nolla?

Ongelma 4. Kuinka suuri on

Matemaattinen kaava, joka esittää limiittiä kun n lähestyy äärettömyyttä, jossa kerrotaan kaikki termit muodossa (1 - 1/primi(n)).

Nyt kun oivalsin suhteen arvon n#-luvuilla,  niin tajusin, että sama ajattelu pätee muihinkin lukuihin. Jos minua kiinnostaa tietää kuinka suuri osuus luonnollisista luvuista ei ole jaollisia luvulla 540 = 2*2*3*3*3*5, niin lasken

Eli tulo lasketaan samalla tavalla kuin alkulukujen tuloillakin. Komplementtituloon otetaan tutkittavan luvun alkutekijöistä vain yksi.

Ongelma 5. Todista edellinen totuus. Tosin, jos olet todistanut ongelman 3, niin todistus on jo valmis.


Kun kirjoitin näitä tarinoita, niin mieleeni muistui viime vuonna lukemani kirjat du Satoyn The Music of Primes ja John Derbyshiren Alkulukujen lumoissa. Jos olet kiinnostunut tämän kaltaisien ongelmien historiasta, niin kehotan tutustumaan noihin kirjoihin.

Mikäli haluat tutustua tarinassa käytettyihin Python koodeihin, niin lähetä minulle sähköpostia.

lähteet

Primorial Wikipediassa
https://en.wikipedia.org/wiki/Primorial

Primorial Math Worldissa
https://mathworld.wolfram.com/Primorial.html

Sympy primorial
https://docs.sympy.org/latest/modules/ntheory.html#sympy.ntheory.generate.primorial

SymPy prime
https://docs.sympy.org/latest/modules/ntheory.html#sympy.ntheory.generate.prime

Andrew Booker The Nth Prime Page
https://t5k.org/nthprime/index.php#nth

Kirjat 2024 blogissani
https://mikkorahikka.blog/2025/01/01/kirjat-2024/

Jätä kommentti

This site uses Akismet to reduce spam. Learn how your comment data is processed.