Nombor cemerlang

Nombor cemerlang

Vladimir Ilyin
"Quantic" №1, 2014

– Dan kami pada sains komputer berpindah ke tahap yang baru! Mula belajar Python! – Vovka yang dikatakan kelapan, berkata yang penting, hanya dia yang berasal dari sekolah.

– Reptilia sedang belajar dalam zoologi! – jawab Andrei, adik lelaki Vova, setelah berpisah dari permainan komputer.

– Anda sendiri adalah reptilia! – Vovka tersenyum. – Python adalah bahasa pengaturcaraan, dan ia dinamakan supaya tidak menghormati ular, tetapi untuk menghormati pameran televisyen "Monty Python". Walau bagaimanapun, ia ditulis dengan cara yang sama seperti ular.

– Nah, apa yang istimewa tentang Python anda?

"Saya tidak tahu lagi," Vovka jujur ​​mengakui. – Kami baru memulakannya. Mereka belajar untuk memasang dan mengetahui bahawa terdapat aritmetik yang panjang di dalamnya dan tidak banyak perbezaan antara tali dan nombor!

– Bagaimana keadaannya? – tanya Andrei. Apa yang dia dengar tidak begitu terinspirasi. Untuk memberitahu kebenaran, dia tidak suka aritmetik, semua orang ada akaun lisan. Dan kemudian ada "lama" …

– Baiklah. Kalkulator anda hanya mempunyai 10 digit. Ini bermakna anda hanya boleh bekerja dengan nombor sepuluh angka. Dan Python boleh mengira sekurang-kurangnya seratus, malah satu juta, tetapi sekurang-kurangnya satu bilion jilid angka! – Seperti ramai kanak-kanak, Vovka percaya kepada kekuatan mahupun komputer.

– Sekarang saya akan tunjukkan, mari kita pasangnya.1 Dan semasa ia ditubuhkan, kita akan memikirkan apa yang akan kita seperti … lama untuk dikira.

– Oh, di sini! Baru-baru ini dibaca dalam "Arithmetic menghiburkan". Syah satu negara timur menjanjikan pencipta catur apa-apa ganjaran. Dia bertanya … untuk menuangkan bijirin beras pada setiap sel papan. Pada sel pertama terdapat satu butir, yang lain – dua, pada ketiga – empat … dan sebagainya, setiap kali 2 kali lebih banyak. Shah gembira bahawa permintaan itu, seperti yang dilihatnya, sangat tidak penting, dan dengan segera mengarahkan segala-galanya untuk diberikan. Ketakutan membiarkan Shah! Buku ini membuktikan bahawa jumlahnya adalah 264 – 1 bijirin, dan ini banyak. Hitungkan berapa lama ia akan mengambil wazir untuk mengukur beras secara tepat, walaupun mereka mempunyai begitu banyak biji-bijian.

– kita mulakan2– lanjut Vovka, yang telah menubuhkan segala-galanya, – boleh dipertimbangkan!

Andrew agak terkejut dengan apa yang dilihatnya. Daripada ikon dan butang biasa dalam tetingkap hitam, sesuatu ditulis dalam bahasa Inggeris dan hanya berkedip kursor.

– Nah, di sini. Kita boleh memasukkan arahan di sini, – jelas Vovka. – Katakanlah

>>> 2+2

tekan Enter dan … voila:

4

Vovka memandang Andrei dengan rupa yang berjaya, seolah-olah dia telah melakukan sesuatu yang sangat penting dan luar biasa.

– Dan bagaimana untuk melipatgandakan tahap untuk menulis? – tanya Andrei.

– Sangat mudah – lihat! Ditambah sebagai +, tolak seperti -, pendaraban – dengan asterisk * (Shift 8), darjah dengan dua tanda bintang (**), bahagian – dengan slaid ke hadapan (/). Boleh dibahagikan sepenuhnya (//).Sebagai contoh, 29/10 adalah dua titik sembilan, dan 29 // 10 adalah tepat 2. Dan ambil baki bahagian (%). Kami melakukannya …

>>> 2**64 – 1

– masukkan Vovk dan menekan Enter, – 18446744073709551615 biji-bijian!

– Banyak! – kata Andrey. – Misalnya mereka dianggap sepuluh kali ganda dan masing-masing menghitung 100 biji sesaat … Dalam satu minit, 60 saat, dalam satu jam, 60 minit … dalam satu milenium 1000 tahun … Selesai. Mari kita tidak mengambil bahagian milenium, kita membahagikannya dengan sepenuhnya. Dan Andrew menjaringkan gol:

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

18446744073709551616

– beberapa jenis karut!

"Sudah tentu," kata Vova, "seperti dalam matematik, mungkin dan perlu meletakkan tanda kurung dalam Python.

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

Komputer itu menjawab:

5849424

– Lima juta lapan ratus empat puluh sembilan ribu empat ratus dua puluh empat ribu tahun dan sedikit lebih. Pencipta catur mungkin mencipta elixir keabadian, jika dia akan menunggu begitu banyak! – Ketawa Andrei.

– Dengar! Pada bulatan, kami datang dengan nombor yang sangat bagus: 550 – ini adalah kerja lima puluh tahun, dan Möbius – guru yang dipanggil sains komputer – memberikan kita tugas:

Buktikan bahawa terdapat nombor tanpa nol, yang boleh dibahagikan dengan pra-cemerlang.

Cara paling mudah untuk membuktikan bahawa ada sesuatu adalah hanya untuk menemuinya! Seterusnya, Python!

>>> 5**50

88817841970012523233890533447265625

Pada mulanya, Andrei sangat gembira, kerana dia adalah yang pertama dari semua kelas yang berjaya melihat nombor pra-cemerlang "hidup". Tetapi kegembiraan itu tidak lama lagi. Dalam yang paling baik ia ternyata menjadi tiga sifar …

– Tiada apa-apa, mari teruskan! – kata Andrew dan mula melipatgandakan yang sangat baik dengan dua, tujuh … Tidak ada yang membantu, malah mengkuadratkan. Di mana-mana terdapat nol …

"Kita boleh cuba mengeluarkan nol dari yang sangat baik," saran Vovka. Ambil, katakan, 1023. Berlipat ganda sebanyak 101 – sifar akan hilang atau sekurang-kurangnya bergerak ke kiri: 1023 • 101 = 102300 + 1023 = 103323.

Sekarang ia dapat didarabkan dengan 10001 (atau 1023 dengan segera oleh 10101, itu adalah perkara yang sama).

– Oh, dapatkan! – kata Andrew dan cepat dikalikan 550 oleh 1000000000001:

88817841970101341075860545970499515533447265625

Sifar terakhir "berpindah" ke tempat ke-19 di sebelah kanan.

– Mari kita tukar dengan 1000001000000000001 …

Angka itu menjadi lebih lama, tetapi sifar berpindah ke kiri – ke kedudukan ke-26. Kemudian pada ke-32, ke-49. Penggandaan yang sangat baik oleh 10000000000000000100000100 00001000001000000000001 "beralih" sifar terakhir ke tempat ke-63 ke kanan. Tetapi masih terdapat beberapa sifar yang tersisa! Andrey sudah letih.

– Dan bagaimana jika nol tidak pernah "diusir"? Dia bertanya.

Soalan Vovka terbantut. Memang, walaupun dengan contoh 1023, dengan pendaraban seperti itu, sifar akan tetap kekal! Lelaki yang tertekan. Tetapi kemudian ayah campur tangan.

"Apakah tanda-tanda kebolehan yang anda ketahui?" – Ayah bertanya.

– Pada 2, 3, 4, 5, 9, 10 … Apa yang perlu dilakukan dengannya?

– Pada 4 – ini bagus! Dan pada 8?

– Nah, tiga angka terakhir harus dibahagikan dengan 8. Ini adalah asas, kerana jika anda "melipat" mereka, akan ada angka yang berakhir dalam tiga nol, dan seribu akan dibahagikan dengan 8.

– Hebat, tetapi hebat?

"Kami tidak berbuat demikian," kata Andrei, tersinggung, mengesyaki bahawa ayah sedang merenung.

– … Mungkin jika 50 digit terakhir nombor dibahagikan kepada pra-cemerlang, maka nombor itu sendiri dibahagikan! Jadi apa? … – pikir Vova.

– Dan itulah yang! – dia terus gembira. – Zero kini berada di posisi ke-63. Ambil 50 digit terakhir nombor – ini akan menjadi jawapannya!

"Kenali diri sendiri," kata Andrei, yang masih kecewa.

– Dan di sini saya tidak akan! Python – kuasa! Cuma temui baki membahagi raksasa kami menjadi satu dengan lima puluh nol. Talian dalam Python ditulis dalam petikan. Mereka juga boleh ditambah dan juga didarab, sementara mereka "terpaku bersama". Dengar, – Vova telah menaip:

>>> “Vovka-dilakukan dengan baik!” *100

Seratus lagi inskripsi muncul di skrin "Vovka-dilakukan dengan baik!“.

– "Kumpulkan" nombor kami:

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

Di sini int untuk melaksanakan operasi aritmetik dengan rentetan seperti nombor. Anda boleh, tentu saja, hanya menulis 10 ** 50, tetapi lebih menarik dengan rentetan! Back – function str. Ia menerjemahkan nombor ke dalam rentetan. Ini supaya anda boleh bertindak dengan nombor seperti rentetan. Sebagai contoh:

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

35

– Fungsi len mencari panjang rentetan. Jadi, dalam pra-cemerlang anda – 35 aksara! Kira! – Vova menyelinap.

Dengan cara ini …

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

– Baiklah, itulah jawapannya:

75394925527871325954265557811595499515533447265625

"Kami akan menyemak," kata Andrei, yang pada masa ini telah tenang sedikit.

>>> 75394925527871325954265557811595499515533447265625 % (5**50)

0

– Tepat sekali! Baki adalah sifar, ia bermakna dibahagikan! Dan tiada sifar!

"Dan di sini, dengan cara ini, kurungan adalah pilihan," kata Vovk. – Kerana dalam Python, seperti dalam matematik, – jika tanpa kurungan, maka pertama adalah ijazah (**), kemudian pendaraban dan pembahagian (*, /, //), dan kemudian tambahan dan penolakan.

Andrew membawa nombor itu ke pencetak – maka Mobius akan terkejut!

"Long" tugas

1. Profesor Burik tidak percaya bahawa bilangan kemungkinan Rubik's Cube yang berbeza adalah 43,252,003,274,489 856,000. Pada 1 Januari 2014, pada tengah malam, beliau melancarkan komputernya untuk memeriksa, yang memeriksa satu bilion negeri sesaat. Berapa masa Burik berada di rumah untuk melihat hasilnya?

2. Buktikan tanda pemisahan yang sangat baik.

3. Berapa banyak di antara seribu darjah pertama dua, mengira dari yang pertama, bermula dengan satu?

Petunjuk: menentukan panjang rentetan, len dan fungsi str.

Artyom Kostyukevich


1 Di laman web python.org di bahagian Muat turun (pautan di sebelah kiri), muat turun pemasang (untuk Windows – di bahagian atas halaman Python Windows x86 MSI Installer) dan pasang.
2 Mula – Semua Program – Python 3.3 – Python (baris arahan).


Like this post? Please share to your friends:
Tinggalkan Balasan

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