Puikus numeris

Puikus numeris

Vladimiras Ильин
"Quantic" № 1, 2014

– Ir mes, kompiuterių mokslai, persikėlė į naują lygį! Pradėjo mokytis Python! – svarbiausia sakė aštuntą gravierius Vovka, tik tas, kuris atvyko iš mokyklos.

– Ropliai mokosi zoologijoje! – atsakė Andrejus, Vovos jaunesnis brolis, atsisukęs nuo kompiuterinio žaidimo.

– Tu pats esi roplis! – Vovka nusišypsojo. – "Python" yra programavimo kalba, todėl ji vadinama ne gyvybės garbei, bet garbei televizijos laidoje "Monty Python". Tačiau jis parašytas taip pat kaip gyvatė.

– Na, kas yra tokia ypatinga jūsų Python?

"Aš dar nežinau", – sąžiningai pripažino Vovka. – Mes ką tik pradėjome tai. Jie išmoko įdiegti ir sužinojo, kad ten yra ilga aritmetika ir nėra daug skirtumų tarp eilučių ir skaičių!

– kaip tai? – paklausė Andrejus. Tai, ko jis išgirdo, nebuvo labai įkvėptas. Tiesą sakant, jam nepatinka aritmetika, visi yra žodžiu. Ir tada yra "ilgas" …

– Na, atrodau. Jūsų skaičiuoklė turi tik 10 skaitmenų. Tai reiškia, kad galite dirbti tik su dešimties skaitmenų numeriais. "Python" gali apskaičiuoti bent šimtą, net milijoną, bet bent milijardą sekstiljonų! – Kaip ir daugelis vaikų, Vovka tikėjo kompiuterių visagalybe.

– Dabar parodysiu, tegul jį įdiegsime.1 Ir kol bus sukurta, mes galvojame apie tai, kas mums turėtų būti tokia … ilgai suskaičiuota.

– Oi, čia! Neseniai perskaitykite "Pramogų aritmetinis". Vienos Rytų šalies šachas pažadėjo šachmatų išradėjui bet kokį atlygį. Jis paprašė … supilti ryžių grūdus į kiekvieną lentos langelį. Pirmojoje ląstelėje yra vienas grūdas, iš kitos – du, trečiame – keturi … ir tt, kiekvieną kartą 2 kartus daugiau. Šachas buvo malonu, kad prašymas, kaip atrodė jam, yra toks nereikšmingas ir iš karto užsakė viską, ko reikia išduoti. Garbė nuleidžia Šahą! Knyga rodo, kad iš viso yra 264 – 1 grūdų, ir tai yra daug. Apskaičiuosime, kiek laiko vizieris turėtų tiksliai išmatuoti ryžius, net jei jie turi tiek daug grūdų.

– mes pradedame2– tęsė Vovka, kuri jau viską sukūrė, – gali būti laikoma!

Andrew buvo šiek tiek nustebęs tuo, ką matė. Vietoj įprastų juodo lango piktogramų ir mygtukų kažkas buvo parašytas anglų kalba ir tiesiog mirktelėjo žymeklį.

– Na, čia. Mes galime įvesti komandas čia, – paaiškino Vovka. – Sakykime

>>> 2+2

paspauskite Enter ir … voila:

4

Vovka pažvelgė į Andrew su triumfuojančiu išvaizda, lyg jis padarė kažką labai svarbaus ir neįprasto.

– Ir kaip dauginti rašymo laipsnį? – paklausė Andrejus.

– labai paprasta – pažvelk! Plius kaip +, minusas -, daugyba – su žvaigždute * (Shift 8), laipsnis su dviem žvaigždutėmis (**), padalijimas – su brūkšniu brūkšniu (/). Galima visiškai suskaidyti (//).Pavyzdžiui, 29/10 yra du taškai devyni, o 29/10 lygiaverčiai yra 2. Išimkite likusią dalį (%). Mes tai darome …

>>> 2**64 – 1

– įvedė Vovką ir paspaudė Enter, – 18446744073709551615 grūdų!

– daug! – sakė Andrejus. – Tarkime, jie laikomi dešimt kartų ir kiekvienas suskaičiuoja 100 grūdų per sekundę … Per minutę, 60 sekundžių, per valandą, 60 minučių … 1000 metų tūkstantmečio … Padaryta. Neatsižvelgiame į tūkstantmečio dalį, mes visiškai ją dalijame. Ir Andriaus rezultatas:

>>> 2**64-1//100*60*60*24*365*1000

18446744073709551616

– kažkokia nesąmonė!

"Žinoma," sakė Vova, "kaip ir matematikos srityje, galima ir būtina įdėti skliaustus" Python ".

>>> (2**64-1)//(100*60*60*24*365*1000)

Kompiuteris atsakė:

5849424

– Penkis milijonus aštuoni šimtai keturiasdešimt devyni tūkstančiai keturi šimtai dvidešimt keturi tūkstančiai metų ir šiek tiek daugiau. Šachmatų išradėjas galbūt išrado nemirtingumo eliksyrą, jei jis ketina laukti tiek daug! – juokėsi Andrejus.

– Klausyk! Apskritai mes sukūrėme labai gerą skaičių: 550 – tai yra penkiasdešimt penki darbai, o Möbiusas – vadinamasis kompiuterijos mokytojas – mums pavedė:

Įrodykite, kad yra skaičius be nulių, kuris yra dalijamasis iš anksto puikiu.

Lengviausias būdas įrodyti, kad kažkas egzistuoja, yra tiesiog tai surasti! Kitas Python!

>>> 5**50

88817841970012523233890533447265625

Iš pradžių Andrejus buvo labai laimingas, nes jis buvo pirmasis iš visų klasės, kuris sugebėjo pamatyti iš anksto puikų skaičių "gyvai". Tačiau džiaugsmas buvo trumpalaikis. Labiausiai puikiai pasirodė trys nuliai …

– nieko, tęsk! – sakė Andriejus ir pradėjo padauginti puikiai per du, septynias … Niekas nepadėjo, netgi kvadrato. Visur buvo nulių …

"Mes galime pabandyti išvesti nulius iš puikių", – pasiūlė Vovka. Paimkite, tarkim, 1023. Padauginkite iš 101 – nulis išnyks arba bent pasislenksite į kairę: 1023 • 101 = 102300 + 1023 = 103323.

Dabar jis gali būti padaugintas iš 10001 (arba 1023 iš karto po 10101, tas pats dalykas).

– Oi, tai gavau! – sakė Andriejus ir greitai padaugino 550 iki 1000000000001:

88817841970101341075860545970499515533447265625

Paskutinis nulis "perkeltas" į 19 vietą dešinėje.

– pabandykime padauginti iš 1000001000000000001 …

Numeris tapo daug ilgiau, o nulis persikėlė į kairę – į 26 vietą. Tada 32-oji, 49-oji. Puikus 10000000000000000100000100 00001000001000000000001 daugiklis "perkeltas" nuo paskutinio nulio į 63 vietą iš dešinės. Bet iš jo liko dar keletas nulių! Andrejus yra pavargęs.

– O jei nuliai niekada nebus "išvaryti"? jis paklausė.

Klausimas Vovka stumped. Iš tiesų, net su 1023 pavyzdžiu, tokiu dauginimu, nulis visada išliks! Vaikinai nusiminusi. Bet tada tėvas įsikišo.

"Kokie dalijimosi požymiai tu žinai?" – Tėvas paklausė.

– 2, 3, 4, 5, 9, 10 … Ką tai turi daryti su juo?

– 4 – tai gerai! O 8

– Na, paskutiniai trys skaitmenys turėtų būti dalijami į 8. Tai yra elementariai, nes jei juos "sulauksite", bus skaičius, baigiasi trimis nuliais, o tūkstančiai bus dalijami iki 8.

– puiku, bet puiku?

"Mes to nepadarėme", – sakė Andrejus, įžeidęs, įtardamas, kad tėvas tiesiog linksminasi.

– … Galbūt, jei paskutiniai 50 skaitmenų numerio yra padalinti į iš anksto puikų, tada pats numeris yra padalintas! Taigi, kas? … – galvojo Vova.

– Ir tai! – jis tęsė laimingai. – Nulis šiuo metu yra 63-oje pozicijoje. Paimkite paskutinius 50 skaičių numerio – tai bus atsakymas!

"Sumažk save", – suviliojo Andrejus, kuris vis dar buvo nusivylęs.

– Ir čia aš ne! Python – galia! Tiesiog suraskime likusį mūsų monster'io padalijimą į penkiasdešimt nulių. Python eilutės yra parašytos kabutėse. Jie taip pat gali būti pridedami ir net dauginami, o jie yra "klijuoti kartu". Žiūrėk, – įvedė Vova:

>>> „Vovka – gerai padaryta!“ *100

Kitas šimtas užrašų pasirodė ekrane "Vovka – gerai padaryta!„.

– "Surinkite" mūsų numerį:

>>> int ("1" + "0" * 50)

Čia int atlikti aritmetines operacijas su eilute kaip su skaičiumi. Galite, žinoma, tiesiog parašyti 10 ** 50, bet tai įdomiau su stygomis! Atgal funkcijos str. Tai verčia numerį į eilutę. Tai reiškia, kad jūs galite veikti kaip eilutė. Pavyzdžiui:

>>> len (str (5 ** 50))

35

– Len funkcija ieško stringo ilgio. Taigi, jūsų iš anksto puikiai – 35 ženklai! Grafas! – Vova sumušė.

Tokiu būdu …

>>> 5 ** 50 * 1000000000000000010000010000001000001000000000001% int ("1" + "0" * 50)

– Na, tai atsakymas:

75394925527871325954265557811595499515533447265625

"Patikrinsime", – sakė Andrejus, kuris šiais laikais šiek tiek nuramino.

>>> 75394925527871325954265557811595499515533447265625 % (5**50)

0

– Tiksliai! Balansas yra lygus nuliui, tai reiškia dalijamasis! Ir nėra nulių!

"Ir čia, beje, skliausteliuose yra neprivaloma," pažymėjo Vovk. – Nes Python, kaip matematikos, – jei nėra skliaustai, pirmojo laipsnio (**), tada daugyba ir dalyba (* /, //) ir tada sudėties ir atimties.

Andrew atnešė numerį spausdintuvui – tada Mobius bus nustebintas!

"Ilgos" užduotys

1. Burik Profesorius netiki, kad galimų skirtingų būsenų Rubiko kubas skaičius yra lygus 43 252 003 274 489 856 000 sausio 1, 2014 m vidurnaktį, jis pradėjo savo kompiuterį patikrinti, kuris tikrina Valstybinio vienas milijardas per sekundę. Koks laikas Buriko namuose matyti rezultatą?

2. Įrodykite padalijimo ženklą puikiai.

3. Kiek iš pirmojo tūkstančio laipsnių iš dviejų, skaičiuojant nuo pirmojo, prasideda viena?

Patarimas: nustatant styginių ilgį len ir str funkcijos.

Menininkas Artyom Kostyukevich


1 Apie python.org svetainėje pagal Download (nuoroda kairėje), atsisiųsti montuotojas ( "Windows" – ne puslapio Pitonas "Windows x86 MSI diegimo viršuje) ir įdiegti.
2 Pradėti – Visos programos – Python 3.3 – Python (komandinė eilutė).


Like this post? Please share to your friends:
Parašykite komentarą

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: