Di /math/33094/deleting-any-digit-yields-a-prime-is-there-a-name-for-ini- pertanyaan ini diajukan. Berapa banyak bilangan prima yang tetap prima setelah Anda menghapus salah satu digitnya? Misalnya 719
prima seperti yang Anda dapatkan 71
, 19
dan 79
. Sementara pertanyaan ini belum terselesaikan saya pikir itu membuat tantangan pengkodean yang bagus.
Tugas. Berikan prime terbesar yang dapat Anda temukan yang tetap prime setelah Anda menghapus salah satu dari digit-nya. Anda juga harus memberikan kode yang menemukannya.
Skor. Nilai prime yang Anda berikan.
Anda dapat menggunakan bahasa pemrograman apa saja dan perpustakaan yang Anda suka asalkan gratis.
Untuk memulai, 99444901133
adalah yang terbesar diberikan pada halaman yang ditautkan.
Batas waktu. Saya akan menerima jawaban benar terbesar yang diberikan tepat satu minggu setelah jawaban benar pertama lebih besar dari 99444901133
yang diberikan dalam jawaban.
Skor sejauh ini.
Python (primo)
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
J (randomra) (Jawaban ini memulai timer satu minggu pada 21 Februari 2013)
222223333333
9901444133
(penghapusan satu 9) bukan prime (7 x 1414492019
). Contoh Anda sebelumnya benar.Jawaban:
274 angka
Ini membutuhkan sekitar 20 jam waktu CPU untuk menemukannya, dan sekitar 2 menit per prime untuk membuktikannya. Sebaliknya, solusi 84 digit dapat ditemukan dalam waktu sekitar 3 menit.
84 digit
77777777999999999999999777777777 (32 digit)
66666666666666622222222222222333 (32 digit)
647777777777777777777777777 (27 digit)
44444441333333333333 (20 digit)
999996677777777777 (18 digit)
167777777777777 (15 digit)
Saya merekomendasikan alat ini jika Anda ingin mengkonfirmasi keaslian: D. Applet ECM Alpern
Juga menggunakan pendekatan repdigit, yang tampaknya merupakan pendekatan yang paling mungkin untuk menemukan nilai besar. Skrip berikut secara algoritmik melompati sebagian besar angka atau pemotongan yang akan menghasilkan kelipatan 2, 3, 5 dan sekarang 11 c / o PeterTaylor (kontribusinya meningkatkan efisiensi sekitar 50%).
my_math.py
dapat ditemukan di sini: http://codepad.org/KtXsydxKAtau, Anda juga dapat menggunakan
gmpy.is_prime
fungsi: Proyek GMPYBeberapa peningkatan kecepatan kecil sebagai akibat dari profil. Pemeriksaan primality untuk kandidat terpanjang dari empat kandidat telah dipindahkan ke akhir,
xrange
menggantikanrange
, danlong
menggantiint
pemain tipe.int
tampaknya memiliki overhead yang tidak perlu jika ekspresi yang dievaluasi menghasilkan along
.Aturan dapat dibagi
Biarkan N menjadi bilangan bulat positif dari bentuk a ... ab ... bc ... c , di mana a , b dan c adalah digit berulang.
Dengan 2 dan 5
- Untuk menghindari keterbagian 2 dan 5 , c mungkin tidak ada dalam set [0, 2, 4, 5, 6, 8] . Selain itu, jika b adalah anggota dari set ini, panjang c mungkin tidak kurang dari 2.
Dengan 3
- Jika N = 1 (mod 3) , maka N mungkin tidak mengandung salah satu [1, 4, 7] , karena menghapus salah satu dari ini akan menghasilkan kelipatan 3 . Demikian juga untuk N = 2 (mod 3) dan [2, 5, 8] . Implementasi ini menggunakan bentuk yang sedikit melemah ini: jika N berisi salah satu [1, 4, 7] , itu mungkin tidak mengandung [2, 5, 8] , dan sebaliknya. Selain itu, N tidak boleh hanya terdiri dari [0, 3, 6, 9] . Ini sebagian besar merupakan pernyataan yang setara, tetapi memang memungkinkan untuk beberapa kasus sepele, misalnya a , b , dan cmasing-masing diulang 3 kali.
By 11
- Seperti yang dicatat PeterTaylor , jika N adalah dari bentuk aabbcc ... xxyyzz , itu hanya terdiri dari digit yang diulang beberapa kali, itu secara sepele dapat dibagi menjadi 11 : a0b0c ... x0y0z . Pengamatan ini menghilangkan setengah dari ruang pencarian. Jika N adalah panjang ganjil, maka panjang a , b dan c semuanya harus ganjil juga (pengurangan ruang pencarian 75%), dan jika N adalah panjang genap, maka hanya satu dari a , b atau c yang mungkin lebih panjangnya (25% pengurangan ruang pencarian).
- Dugaan: jika abc merupakan kelipatan dari 11 , misalnya 407 , maka semua pengulangan ganjil dari a , b dan c juga akan menjadi kelipatan dari 11 . Ini jatuh dari ruang lingkup keterbagian di atas oleh 11 aturan; pada kenyataannya, hanya pengulangan ganjil di antara mereka yang diizinkan secara eksplisit. Saya tidak punya bukti untuk ini, tetapi pengujian sistematis tidak dapat menemukan contoh tandingan. Bandingkan: 444077777 , 44444000777 , 44444440000077777777777 , dll.
Siapa pun dapat merasa bebas untuk membuktikan atau membantah dugaan ini.Aditsu sejak itu menunjukkan ini benar.Bentuk lainnya
2 set angka yang berulang
Jumlah bentuk yang dikejar randomra , a ... a ... b , tampaknya jauh lebih langka. Hanya ada 7 solusi yang kurang dari 10 1700 , yang terbesar adalah 12 digit.
4 set digit berulang
Nomor dari formulir ini, a ... ab ... bc ... cd ... d , tampaknya lebih padat daripada yang saya cari. Ada 69 solusi kurang dari 10 100 , dibandingkan dengan 32 menggunakan 3 set digit berulang. Antara 10 11 dan 10 100 adalah sebagai berikut:
Ada argumen heuristik sederhana mengapa ini harus terjadi. Untuk setiap panjang digital, ada sejumlah set berulang (yaitu 3 set berulang, atau 4 set berulang, dll.) Di mana jumlah solusi yang diharapkan akan menjadi yang tertinggi. Transisi terjadi ketika jumlah solusi tambahan yang mungkin, diambil sebagai rasio, melebihi probabilitas bahwa jumlah tambahan yang akan diperiksa adalah prima. Mengingat sifat eksponensial dari kemungkinan untuk memeriksa, dan sifat logaritmik dari distribusi bilangan prima, ini terjadi relatif cepat.
Jika, misalnya, kami ingin menemukan solusi 300 digit, memeriksa 4 set digit berulang akan jauh lebih mungkin menghasilkan solusi daripada 3 set, dan 5 set akan lebih mungkin lagi. Namun, dengan kekuatan komputasi yang saya miliki, menemukan solusi yang jauh lebih besar dari 100 digit dengan 4 set akan berada di luar kapasitas saya, apalagi 5 atau 6.
sumber
d^x e^y f^z
memerlukan setidaknya dua panjang urutan menjadi aneh untuk menghindari keterbelahan oleh 11. Saya tidak tahu apakahis_prime
akan menolak kelipatan 11 dengan cukup cepat untuk membuat ini tidak layak secara eksplisit memperhitungkan.(na&1)+(nb&1)+(nc&1) > 1
cukup sederhana sehingga harus lebih cepat. Tunggu sebentar, ini bisa cabang pendek penuh curcuit! Jikana
genap, dannb + nc
ganjil, maka salah satunya[nb, nc]
harus genap, dan Anda bisa langsung beralih ke yang berikutnyana
.2
.1
berarti itu hanya mungkin perdana222223333333 (12 digit)
Di sini saya hanya mencari format aa..aabb..bb hingga 100 digit. Hanya hit lainnya adalah 23 37 53 73 113 311.
Kode J (dibersihkan) (maaf, tidak ada penjelasan):
sumber
Sunting: Seseorang sudah melakukan analisis lebih dalam daripada yang saya lakukan di sini.
Bukan solusi tetapi perkiraan kasar pada jumlah solusi n-digit.
Menghasilkan kode J
sumber
Javascript (Brute Force)
Belum menemukan angka yang lebih tinggi
http://jsfiddle.net/79FDr/4/
Tanpa perpustakaan bigint, javascript terbatas pada bilangan bulat
<= 2^53
.Karena itu Javascript, browser akan mengeluh jika kita tidak merilis utas eksekusi untuk UI untuk memperbarui, sebagai hasilnya, saya memutuskan untuk melacak di mana algoritma sedang dalam perkembangannya di UI.
sumber
Tautan ke analisis masalah telah diposting, tetapi saya pikir ada beberapa hal yang hilang. Mari kita lihat jumlah digit m, yang terdiri dari urutan k dari 1 atau lebih digit identik. Terlihat bahwa jika kita membagi digit ke dalam grup {0, 3, 6, 9}, {1, 4, 7}, dan {2, 5, 8}, solusi tidak dapat mengandung digit dari grup kedua dan ketiga , dan harus mengandung 3n + 2 digit dari salah satu grup ini. Setidaknya dua dari sekuens k harus memiliki jumlah digit ganjil. Dari digit {1, 4, 7} hanya 1 dan 7 yang bisa menjadi digit terendah. Tak satu pun dari {2, 5, 8} yang bisa menjadi digit terendah. Jadi ada empat (1, 3, 7, 9) atau dua (3, 9) pilihan untuk digit terendah,
Ada berapa kandidat? Kami memiliki m digit yang dipisah dalam urutan k minimal 1 digit. Ada (m - k + 1) lebih dari (k - 1) cara untuk memilih panjang urutan ini, yaitu sekitar (m - 1.5k + 2) ^ (k - 1) / (k - 1) !. Ada 2 atau 4 pilihan untuk digit terendah, total enam. Ada enam pilihan untuk digit lainnya, kecuali 36/7 pilihan untuk digit tertinggi; totalnya adalah (6/7) * 6 ^ k. Ada 2 ^ k cara untuk memilih apakah panjang urutannya genap atau ganjil; k +1 dari ini dikecualikan karena tidak ada atau hanya satu yang aneh; kita mengalikan jumlah pilihan dengan (1 - (k + 1) / 2 ^ k), yaitu 1/4 ketika k = 2, 1/2 ketika k = 3, 11/16 ketika k = 4 dll. Angka digit dari himpunan {1, 4, 7} atau {2, 5, 8} harus 3n + 2, sehingga jumlah pilihan dibagi 3.
Mengalikan semua angka ini, jumlah kandidat adalah
atau
Kandidat itu sendiri dan nomor k yang dibuat dengan menghapus digit harus semuanya bilangan prima. Probabilitas bilangan bulat acak di sekitar N adalah prima adalah sekitar 1 / ln N. Probabilitas untuk angka m acak adalah sekitar 1 / (m ln 10). Namun, angka-angka di sini tidak acak. Mereka semua telah dipilih untuk tidak dapat dibagi oleh 2, 3, atau 5. 8 dari 30 bilangan bulat berturut-turut tidak dapat dibagi dengan 2, 3, atau 5. Oleh karena itu, probabilitas untuk menjadi yang utama adalah (30/8) / (m ln 10) atau sekitar 1,6286 / m.
Jumlah solusi yang diharapkan adalah sekitar
atau untuk m besar tentang
Untuk k = 2, 3, 4, ... kami mendapatkan yang berikut:
Dari k = 10 dan seterusnya, angkanya semakin kecil lagi.
sumber