274 цифри
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
На це знадобилося близько 20 годин процесорного часу, і на те, щоб довести приблизно 2 хвилини за першості. Навпаки, 84-розрядне рішення можна знайти приблизно за 3 хвилини.
84 цифри
444444444444444444444444444444444444444444444444441111111113333333333333333333333333
77777777999999999999999777777777 (32 цифри)
66666666666666622222222222222333 (32 цифри)
64777777777777777777777777777 (27 цифр)
4444444133333333333333 (20 цифр)
999996677777777777 (18 цифр)
1677777777 ( 17 цифр) 1677777777
Я рекомендую цей інструмент, якщо ви хочете підтвердити первинність: аплет Д. Алперна ECM
Також з використанням репідгітального підходу, який, схоже, підхід найімовірніше знайде великі значення. Наступний алгоритм алгоритмічно пропускає більшість чисел або скорочень, що призведе до кратності 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 Project
Деякі невеликі покращення швидкості в результаті профілювання. Перевірка первинності для найдовшого з чотирьох кандидатів переміщена до кінця, xrange
замінює range
і long
замінює int
касти типу. int
Здається, зайві накладні витрати, якщо оцінений вираз призводить до а long
.
Правила поділу
Нехай N - позитивне ціле число форми a ... ab ... bc ... c , де a , b і c - повторювані цифри.
За 2 та 5
- Щоб уникнути поділу на 2 та 5 , c може бути у множині [0, 2, 4, 5, 6, 8] . Крім того, якщо b є членом цього набору, довжина c може бути не менше 2.
За 3
- Якщо N = 1 (mod 3) , то N може не містити жодного з [1, 4, 7] , оскільки видалення будь-якого з них тривіально призведе до кратного 3 . Аналогічно для N = 2 (mod 3) та [2, 5, 8] . Ця реалізація використовує дещо ослаблену форму цього: якщо N містить один із [1, 4, 7] , він може не містити жодного з [2, 5, 8] , і навпаки. Крім того, N не може складатися виключно з [0, 3, 6, 9] . Це значною мірою еквівалентне твердження, але воно допускає деякі тривіальні випадки, наприклад, a , b і cкожен повторюється кратно 3 рази.
До 11
- Як зазначає ПетерТейлор , якщо N має форму aabbcc ... xxyyzz , тобто складається лише з цифр, повторених парне число разів, це тривіально ділиться на 11 : a0b0c ... x0y0z . Це спостереження усуває половину простору пошуку. Якщо N має непарну довжину, то довжина a , b і c також повинна бути непарною (75% зменшення простору пошуку), а якщо N має парну довжину, то лише одна з a , b або c може бути парною в довжину (зменшення на 25% пошукового простору).
- Концепція: якщо abc кратне 11 , наприклад 407 , то всі непарні повторення a , b і c також будуть кратними 11 . Це випадає із сфери застосування вищезазначеного поділу за правилами 11 ; насправді серед тих, які явно дозволені, є лише непарні повтори. Я не маю доказів цьому, але систематичне тестування не змогло знайти зустрічний приклад. Порівняйте: 444077777 , 44444000777 , 44444440000077777777777 тощо. Будь-хто може сміливо доводити або спростувати цю гіпотезу. aditsu з тих пір продемонстрував, що це правильно.
Інші форми
2 набори повторних цифр
Числа форми, яку переслідували випадкові , a ... ab ... b , здаються набагато рідшими . Існує лише 7 рішень менше 10 1700 , найбільший з яких - 12 цифр.
4 набори повторних цифр
Числа цієї форми, a ... 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
). Однак ваш попередній приклад був правильним.