MIKKO RAHIKKA

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


Numeroiden lukumäärä -ongelma

Taas uusi pieni lukuihin ja numeroihin liittyvä pähkinä purtavaksi. Tutkitaan kymmenjärjestelmän numeroiden 0, 1,…, 8, 9 lukumääriä lukujonossa (0, 1, 2, … , 99…999)? Viimeisessä luvussa on monta yhdeksikköä.

Tämän artikkelin myötä pidän pientä taukoa kirjoittamisessa. Minulla on muita hommia jonkin aikaa.

Kun itse aloin ratkoa tätä ongelmaa, niin kirjoitin ensin numeroita peräkkäin ja laskin merkkijonossa esiintyvien numeroiden määriä. Lopulta ymmärsin, miten laskea numeroiden lukumääriä.

koodi GeoGebralla

GeoGebralla sain tuotettua numerot peräkkäin Syöttökentän komennolla

numerot=Summa(Jono(Teksti(n),n,0,99))
numerot = "0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899"

Edellisessä komennossa Teksti(n) tuottaa luvun merkkijonona (tekstinä), Jono tekee numeromerkkijonoista listan {”0”, ”1”,… ,”99″} ja Summa liittää listan yhdeksi merkkijonoksi.

Kirjaimien lukumäärä saadaan Pituus-komennolla. Ykkösten ja nollien lukumäärän laskeminen vaatii hieman kikkailua unicode-koodin avulla.

numeroita=Pituus(numerot)
numeroita=190

Ykkösten ja nollien lukumäärän laskeminen vaatii hieman kikkailua unicode-koodin avulla. Numeron nolla unicode-koodi on 48, … ja yhdeksän koodi on 57.

koodi=UnicodeTekstistä(numerot)
koodi = {48, 49, ..., 56, 57, 57}

nollat=LaskeJos(x==48, koodi)
nollat=10

ykkoset=LaskeJos(x==49, koodi)
ykkoset=20

Ja sama englannikielisille lukijoille.

Taulukkolaskennassa noiden komentojen avulla saanee nätin taulukon. Jätän sen tuottamisen lukijalle.

koodi pythonilla

Tehdään pieni koodinpätkä, jolla numeroiden laskeminen saadaan aikaiseksi Pythonilla. Koodissa on esitetty kolme eri tapaa tuottaa merkkijono ”0123…99899”. Lähteet-luvussa on linkkejä, joiden avulla voi ymmärtää paremmin, miten ne toimivat.

Riveillä 1-5 käytetään perinteistä for-silmukkaa merkkijonolistan [”0”, ”1”, …, ”999”] tuottamiseksi. Rivillä 5 join()-metodi liittää listan merkkijonoksi ”0123…999”.

Rivillä 7 käytetään yhden rivin for silmukka -menetelmää ja rivillä 8 käytetään map-funktiota.

ongelmia

Merkitään lukujen lukumäärää N:llä, tällöin viimeinen luku on 10N-1. Oheisessa taulukossa on kymmenjärjestelmän lukujonon (0, 1, 2, …, 10N – 1) nollien, ykkösten, kaikkien numeroiden lukumäärä ja nollien ja ykkösten lukumäärien suhde.

Ongelma 1. Kirjoita lauseke , jonka avulla voi laskea ykkösten lukumäärä, kun muuttujana on N.

Ongelma 2. Kirjoita lauseke , jonka avulla voi laskea nollien lukumäärä,  kun muuttujana on N.

Ongelma 3. Osoita, että (nollien lukumäärä) / (ykkösten lukumäärä) lähestyy arvoa 1, kun N kasvaa rajatta. Tai toisin sanoin. Osoita, että nollien ja ykkösten suhteellinen lukumäärä lähestyy arvoa 1/10 kun N lähestyy ääretöntä.

Ongelma 4. Millä N:n (N>1) arvolla  (nollien lukumäärä) / (ykkösten lukumäärä) on suurempi kuin 0,99?

Taulukossa näkyy sellainen hauska ominaisuus, että nollien sarakkeessa on samat luvut kuin kaikkien numeroiden sarakkeessa. Mieti miksi?

liitteet

Merkkijonometodit esimerkeillä
https://mikkorahikka.blog/2023/01/06/merkkijonometodit-esimerkeilla/

Jono GeoGebrassa
https://mikkorahikka.blog/2018/10/26/jono-geogebrassa/

GeoGebraohje Sum Command
https://wiki.geogebra.org/en/Sum_Command

GeoGebraohje TextToUnicode Command
https://wiki.geogebra.org/en/TextToUnicode_Command

GeoGebraohje CountIf Command
https://wiki.geogebra.org/en/CountIf_Command

Treehouse blogiartikkeli Python One Line for Loops [Tutorial]
https://blog.teamtreehouse.com/python-single-line-loops 

W3schools-sivu Python map() Function
https://www.w3schools.com/python/ref_func_map.asp

OEIS A033714
https://oeis.org/A033714

Jätä kommentti

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