274 หลัก
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
ใช้เวลาในการค้นหา CPU ประมาณ 20 ชั่วโมงและใช้เวลาประมาณ 2 นาทีในการทดสอบ ในทางตรงกันข้ามโซลูชั่น 84 หลักสามารถพบได้ในเวลาประมาณ 3 นาที
84 หลัก
444444444444444444444444444444444444444444444444441111111113333333333333333333333333
77777777999999999999999777777777 (32 หลัก)
66666666666666622222222222222333 (32 หลัก)
647777777777777777777777777 (27 หลัก)
44444441333333333333 (20 หลัก)
999996677777777777 (18 หลัก)
167777777777777 (15 หลัก)
ฉันขอแนะนำเครื่องมือนี้หากคุณต้องการยืนยันความเป็นอันดับแรก : D. Applet ECM ของ Alpern
นอกจากนี้ยังใช้วิธีการทำซ้ำซึ่งดูเหมือนจะเป็นวิธีที่มีแนวโน้มมากที่สุดที่จะหาค่ามาก สคริปต์ต่อไปนี้อัลกอริทึมข้ามตัวเลขหรือการตัดส่วนใหญ่ซึ่งจะส่งผลให้ทวีคูณเป็น2, 3, 5และตอนนี้11 c / o PeterTaylor (การมีส่วนร่วมของเขาเพิ่มประสิทธิภาพโดยประมาณ 50%)
from my_math import is_prime
sets = [
(set('147'), set('0147369'), set('1379')),
(set('369'), set('147'), set('1379')),
(set('369'), set('0369'), set('17')),
(set('258'), set('0258369'), set('39')),
(set('369'), set('258'), set('39'))]
div2or5 = set('024568')
for n in range(3, 100):
for sa, sb, sc in sets:
for a in sa:
for b in sb-set([a]):
bm1 = int(b in div2or5)
for c in sc-set([b]):
if int(a+b+c)%11 == 0: continue
for na in xrange(1, n-1, 1+(n&1)):
eb = n - na
for nb in xrange(1, eb-bm1, 1+(~eb&1)):
nc = eb - nb
if not is_prime(long(a*(na-1) + b*nb + c*nc)):
continue
if not is_prime(long(a*na + b*(nb-1) + c*nc)):
continue
if not is_prime(long(a*na + b*nb + c*(nc-1))):
continue
if not is_prime(long(a*na + b*nb + c*nc)):
continue
print a*na + b*nb + c*nc
my_math.py
สามารถพบได้ที่นี่: http://codepad.org/KtXsydxK
หรือคุณสามารถใช้gmpy.is_prime
ฟังก์ชั่น: โครงการ GMPY
การปรับปรุงความเร็วเล็กน้อยบางส่วนเป็นผลมาจากการทำโปรไฟล์ การตรวจสอบแบบดั้งเดิมสำหรับผู้สมัครที่ยาวที่สุดสี่คนถูกย้ายไปที่จุดสิ้นสุดxrange
แทนที่range
และlong
แทนที่การint
ปลดเปลื้องประเภท ดูเหมือนว่าจะมีค่าใช้จ่ายที่ไม่จำเป็นถ้าผลการประเมินการแสดงออกในint
long
กฎการแบ่งส่วน
ให้Nเป็นจำนวนเต็มหลังของรูปแบบa ... ab ... bc ... cโดยที่a , bและcเป็นตัวเลขหลักซ้ำ
โดย 2 และ 5
- เพื่อหลีกเลี่ยงการหารโดย2และ5 , คอาจจะไม่อยู่ในชุด[0, 2, 4, 5, 6, 8] นอกจากนี้หากbเป็นสมาชิกของชุดนี้ความยาวของcอาจไม่น้อยกว่า 2
3
- หากN = 1 (สมัย 3)แล้วยังไม่มีอาจจะไม่ได้มีการใด ๆ ของ[1, 4, 7]เป็นลบใด ๆ เหล่านี้จะส่งผลให้นิด ๆ หลายของ3 ในทำนองเดียวกันสำหรับN = 2 (สมัย 3)และ[2, 5, 8] การใช้งานนี้ใช้รูปแบบที่อ่อนแอลงเล็กน้อยหากNมีหนึ่งใน[1, 4, 7]มันอาจไม่มี[2, 5, 8]และในทางกลับกัน นอกจากนี้Nอาจไม่ประกอบด้วย[0, 3, 6, 9]เพียงอย่างเดียว นี่เป็นคำสั่งที่เทียบเท่ากันส่วนใหญ่ แต่จะอนุญาตให้ใช้ในบางกรณีเล็กน้อยเช่นa , bและcแต่ละคนซ้ำหลายครั้ง3ครั้ง
โดย 11
- ดังที่PeterTaylorบันทึกไว้ถ้าNเป็นรูปแบบaabbcc ... xxyyzzนั่นคือมันประกอบด้วยตัวเลขที่ซ้ำกันหลายครั้งเท่านั้นมันจะหารด้วย11 : a0b0c ... x0y0zเพียงเล็กน้อยเท่านั้น การสังเกตนี้กำจัดครึ่งหนึ่งของพื้นที่การค้นหา หากยังไม่มีเป็นของความยาวแปลกแล้วความยาวของ, ขและคทั้งหมดจะต้องแปลกเช่นกัน (75% การลดพื้นที่การค้นหา) และถ้ายังไม่มีเป็นของความยาวแม้แล้วเพียงหนึ่งใน, BหรือCอาจจะยิ่ง ความยาว (การลดพื้นที่การค้นหา 25%)
- การคาดคะเน
ถ้าabcมีหลาย11ตัวอย่างเช่น407แล้วทั้งหมดซ้ำคี่ของ, BและCก็จะทวีคูณของ11 สิ่งนี้หลุดออกจากขอบเขตของการแบ่งแยกด้านบนตามกฎ11ข้อ; อันที่จริงมีเพียงการทำซ้ำที่แปลก ๆ เท่านั้นที่อยู่ในประเภทที่ได้รับอนุญาตอย่างชัดเจน ฉันไม่มีข้อพิสูจน์สำหรับเรื่องนี้ แต่การทดสอบอย่างเป็นระบบไม่สามารถหาตัวอย่างเคาน์เตอร์ได้ เปรียบเทียบ: 444077777 , 44444000777 , 44444440000077777777777ฯลฯทุกคนอาจรู้สึกอิสระที่จะพิสูจน์หรือพิสูจน์หักล้างการคาดเดานี้ aditsuได้แสดงให้เห็นว่าสิ่งนี้ถูกต้องตั้งแต่
แบบฟอร์มอื่น ๆ
ตัวเลขซ้ำ
จำนวน2 ชุดตัวเลขของแบบฟอร์มที่สุ่มกำลังตามหา... ab ... bดูเหมือนจะหายากกว่านี้มาก มีเพียง 7 โซลูชั่นที่น้อยกว่า10 1700ซึ่งใหญ่ที่สุดคือความยาว 12 หลัก
ตัวเลขซ้ำ
จำนวน4 ชุดตัวเลขของแบบฟอร์มนี้... ab ... bc ... cd ... d , ปรากฏว่ามีการกระจายหนาแน่นกว่าที่ฉันค้นหา มี 69 โซลูชั่นน้อยกว่า10 100เมื่อเทียบกับ 32 โดยใช้ตัวเลขซ้ำ 3 ชุด ผู้ที่อยู่ระหว่าง10 11และ10 100มีดังนี้:
190000007777
700000011119
955666663333
47444444441111
66666622222399
280000000033333
1111333333334999
1111333333377779
1199999999900111
3355555666999999
2222233333000099
55555922222222233333
444444440004449999999
3366666633333333377777
3333333333999888883333
4441111113333333333311111
2222222293333333333333999999
999999999339999999977777777777
22222226666666222222222299999999
333333333333333333339944444444444999999999
559999999999933333333333339999999999999999
3333333333333333333111111111111666666666611111
11111111333330000000000000111111111111111111111
777777777770000000000000000000033333339999999999999999999999999
3333333333333333333333333333333333333333333333336666666977777777777777
666666666666666666611111113333337777777777777777777777777777777777777777
3333333333333333333888889999999999999999999999999999999999999999999999999933333333
มีการโต้แย้งแบบฮิวริสติกแบบง่าย ๆ ว่าทำไมถึงเป็นเช่นนั้น สำหรับความยาวดิจิตอลแต่ละชุดจะมีชุดซ้ำหลายชุด (เช่นชุดซ้ำ 3 ชุดหรือชุดซ้ำ 4 ชุด ฯลฯ ) ซึ่งจำนวนโซลูชันที่คาดหวังจะสูงที่สุด การเปลี่ยนแปลงเกิดขึ้นเมื่อจำนวนโซลูชันที่เป็นไปได้เพิ่มเติมซึ่งคิดเป็นอัตราส่วนมีมากกว่าความน่าจะเป็นที่จำนวนเพิ่มเติมที่จะตรวจสอบนั้นเป็นจำนวนมาก เมื่อพิจารณาถึงลักษณะเลขชี้กำลังของความเป็นไปได้ในการตรวจสอบและลักษณะลอการิทึมของการแจกแจงจำนวนเฉพาะสิ่งนี้เกิดขึ้นอย่างรวดเร็ว
ตัวอย่างเช่นหากเราต้องการค้นหาโซลูชัน 300 หลักการตรวจสอบตัวเลขซ้ำ 4 ชุดน่าจะเป็นวิธีสร้างโซลูชันมากกว่า 3 ชุดและ 5 ชุดน่าจะยังคงมีแนวโน้มมากขึ้น อย่างไรก็ตามด้วยพลังการประมวลผลที่ฉันมีอยู่ในมือการค้นหาโซลูชันที่มีขนาดใหญ่กว่า 100 หลักที่มี 4 ชุดจะอยู่นอกเหนือความสามารถของฉันให้อยู่คนเดียว 5 หรือ 6
9901444133
(การลบหนึ่ง 9 รายการ) ไม่ใช่สิ่งสำคัญ (7 x 1414492019
) แม้ว่าตัวอย่างก่อนหน้าของคุณถูกต้องแล้ว