Знайдіть найбільший прайм, який досі залишається простим після видалення цифр


19

На /math/33094/deleting-any-digit-yields-a-prime-is-there-a-name-для цього задається наступне питання. Скільки є простих простирадлів, які залишаються простими після видалення будь-якої з її цифр? Наприклад 719, такий розквіт, як ви отримуєте 71, 19і 79. Незважаючи на те, що це питання не вирішено, я вважав, що це приємне завдання кодування.

Завдання. Дайте найбільший простір, який можна виявити, що залишається простим, коли ви видалите будь-яку з його цифр. Ви також повинні надати код, який його знаходить.

Оцінка. Значення премії, яку ви даєте.

Ви можете використовувати будь-яку мову програмування та бібліотеки, які вам подобаються, якщо вони безкоштовні.

Для початку речі 99444901133- це найбільший розміщений на пов’язаній сторінці.

Термін. Я прийму найбільшу правильну відповідь, дану рівно через тиждень після того, як перша правильна відповідь більша, ніж 99444901133у відповіді.

Оцінки поки що.

Пітон (прима)

4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111

J (randomra) (Ця відповідь розпочалася однотижневим таймером 21 лютого 2013 р.)

222223333333

9901444133(видалення одного 9) не є простим ( 7 x 1414492019). Однак ваш попередній приклад був правильним.
примо

@primo Спасибі, виправлено. Це було дивне друкарство.
motl7

1
Якщо є найбільший - як здається, аналіз показує, мені цікаво, як ви могли б отримати доказ, коли думаєте, що знайшли його.
гніблер

1
Що з іншими базами? У базі 2 я не міг знайти нічого вищого за 11 (2r1011), 11 також в базі 3 (3r102), 262151 в базі 4 (4r1000000013), 17 в базі 5 (5r32), 37 в базі 7 (7r52), 47 в базі 9 (9р52).
aka.nice

Відповіді:


17

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.


3
Будь-яке рішення форми d^x e^y f^zвимагає, щоб принаймні дві довжини послідовностей були непарними, щоб уникнути поділу на 11. Я не знаю, чи is_primeвідхилять кратні 11 досить швидко, щоб зробити це не варто явно враховувати.
Пітер Тейлор

Я не маю перед собою джерела gmp, але це, швидше за все, починається з пробного поділу на невеликі праймери. І все-таки (na&1)+(nb&1)+(nc&1) > 1досить проста, що повинна бути швидшою. Зачекайте хвилинку, це може коротко скоротити повноцінні гілки! Якщо naпарне і nb + ncнепарне, то одна з [nb, nc]обов'язково повинна бути парною, і ви можете просто перейти до наступної na.
примо

Будьте уважні, якщо ви використовуєте gmpy.is_prime (). Поза певним моментом він є ймовірнісним, тому вам потрібно перевірити його повернення a 2. 1значить, це лише ймовірно прем'єр
гніблер

4
Прямий і точний тест на подільність на 11 полягає в тому, щоб додати всі цифри в парних позиціях і відняти всі цифри в непарних позиціях (або навпаки) і перевірити, чи результат є кратним 11. Як висновок (але також може бути виведено безпосередньо), ви можете зменшити всі послідовності 2+ однакових цифр до 0 або 1 цифр (приймаючи довжину послідовності% 2). 44444440000077777777777 таким чином зменшується до 407; 4 + 7-0 = 11. 4444444444444444444444444444444444444444444444441111111113333333333333333333333333 зменшується до 13.
aditsu

1
"міцний"! = перевірений. Різниця не важлива для одних, важлива для інших. PrimeQ в Mathematica - це варіант BPSW плюс додатковий ЗР з базою 3, тому, звичайно, це займе лише пару мілісекунд. Pari / GP доводить 274-значний номер за допомогою APR-CL приблизно за 3 секунди на 5-річному комп'ютері, а одноядерний ECPP з відкритим кодом займає близько 2 секунд. Не дивно, що для Java це займає більше часу, але це не велика справа. У мене був переклад цього Perl на BPSW на всіх 4, то доказ на всіх 4, тільки якщо вони всі здали дешеві тести.
DanaJ

5

222223333333 (12 цифр)

Тут я шукав лише формат aa..aabb..bb до 100 цифр. Лише інші хіти - 23 37 53 73 113 311.

J-код (очищено) (вибачте, без пояснень):

a=.>,{,~<>:i.100
b=.>,{,~<i.10
num=.".@(1&":)@#~
p=.(*/"1@:((1&p:)@num) (]-"1(0,=@i.@#)))"1 1
]res=./:~~.,b (p#num)"1 1/ a

Вичерпний пошук цієї форми до 1560 цифр (і підрахунок) не виявляє нічого більшого, ніж це 12-значне рішення.
примо

2

Редагувати: хтось уже робив глибший аналіз, ніж я тут.

Не рішення, а приблизна оцінка кількості розрядів n-значних.

Орієнтовна кількість рішень

Генерування J-коду

   ops=: 'title ','Estimated number of solutions by digits',';xcaption ','digits',';ycaption ','log10 #'
   ops plot 10^.((%^.)%(2&(%~)@^.@(%&10))^(10&^.))(10&^(2+i.100))

Спасибі. Вісь y трохи заплутана. Ви дійсно маєте на увазі 10 ^ -100 як орієнтовна кількість рішень з приблизно 86 цифрами?
motl7

Так. Якщо існує кінцева кількість рішень, це правдоподібно. Незважаючи на те, що на основі наявних даних, ця оцінка дещо відхилена, оскільки повторення цифр створює кореляцію між числами з однією меншою цифрою.
randomra

1
Хтось уже робив глибший аналіз, ніж я
випадковість,

Чи є вісь у співвідношенні чисел із x цифрами, що є рішеннями? Це кількість рішень, поділене на 10 ^ (# цифр)? Це не може бути число, яке виглядає як 4, 11 і т.д., і лог цього майже завжди вище 1.
motl7

1

Javascript (Brute Force)

Більше не знайшло більшої кількості

http://jsfiddle.net/79FDr/4/

Без бібліотеки bigint javascript обмежений цілими числами <= 2^53.

Оскільки це Javascript, браузер поскаржиться, якщо ми не випустимо потік виконання оновленого інтерфейсу для оновлення, в результаті я вирішив відстежити, де алгоритм просувається в інтерфейсі.

function isPrime(n){
    return n==2||(n>1&&n%2!=0&&(function(){
        for(var i=3,max=Math.sqrt(n);i<=max;i+=2)if(n%i==0)return false;
        return true;
    })());
};

var o=$("#o"), m=Math.pow(2,53),S=$("#s");

(function loop(n){
    var s = n.toString(),t,p=true,i=l=s.length,h={};
    if(isPrime(n)){
        while(--i){
            t=s.substring(0,i-1) + s.substring(i,l); // cut out a digit
            if(!h[t]){   // keep a hash of numbers tested so we don't end up testing 
                h[t]=1;  // the same number multiple times
                if(!isPrime(+t)){p=false;break;}
            }
        }
        if(p)
            o.append($("<span>"+n+"</span>"));
    }
    S.text(n);
    if(n+2 < m)setTimeout(function(){
        loop(n+2);
    },1);
})(99444901133);

@Schmiddty Є великі бібліотеки Int для js, але цей метод грубої сили здається приреченим.
motl7

1
@ motl7 Погодився, залишив його працювати всю ніч, і відповіді не знайдено.
Шміддті

1

Було розміщено посилання на аналіз проблеми, але я подумав, що в ньому відсутні кілька речей. Давайте розглянемо числа m цифр, що складаються з k послідовностей з 1 або більше однакових цифр. Було показано, що якщо ми розділимо цифри на групи {0, 3, 6, 9}, {1, 4, 7} і {2, 5, 8}, рішення не може містити цифр як другої, так і третьої групи , і він повинен містити 3n + 2 цифри від однієї з цих груп. Принаймні дві k послідовності повинні мати непарну кількість цифр. З цифр {1, 4, 7} найменшою цифрою можуть бути лише 1 і 7. Жоден з {2, 5, 8} не може бути найнижчою цифрою. Таким чином, є або чотири (1, 3, 7, 9), або два (3, 9) варіанти для найнижчої цифри,

Скільки там кандидатів? У нас є m розрядів, розділених на k послідовності принаймні 1 цифру. Існують (m - k + 1) над (k - 1) способи вибору довжин цих послідовностей, тобто приблизно (m - 1,5k + 2) ^ (k - 1) / (k - 1) !. Існує 2 або 4 варіанти для найнижчої цифри, загалом шість. Для інших цифр є шість варіантів, крім 36/7 вибору для найбільшої цифри; загальна сума (6/7) * 6 ^ k. Є 2 ^ k способи вибрати, чи довжина послідовності є парною чи непарною; k + 1 з них виключаються, оскільки жоден або лише один не є непарними; множимо кількість варіантів на (1 - (k + 1) / 2 ^ k), що становить 1/4, коли k = 2, 1/2, коли k = 3, 11/16, коли k = 4 і т. п. Число цифр із набору {1, 4, 7} або {2, 5, 8} повинно бути 3n + 2, тому кількість варіантів ділиться на 3.

Помноживши всі ці числа, кількість кандидатів є

(m - 1.5k + 2)^(k - 1) / (k - 1)! * (6/7) * 6^k * (1 - (k + 1) / 2^k) / 3

або

(m - 1.5k + 2)^(k - 1) / (k - 1)! * (2/7) * 6^k * (1 - (k + 1) / 2^k)

Сам кандидат і k числа, які створюються шляхом вилучення цифри, повинні бути простими рівнями. Ймовірність того, що випадкове ціле число навколо N є простим, становить приблизно 1 / ln N. Імовірність випадкового m-значного числа приблизно 1 / (m ln 10). Однак числа тут не випадкові. Всі вони були вибрані таким, що не поділяються на 2, 3 або 5. 8 з будь-яких 30 послідовних цілих чисел не ділиться на 2, 3 або 5. Тому ймовірність бути простим (30/8) / (м ln 10) або приблизно 1,6286 / м.

Очікувана кількість рішень приблизно

(m - 1.5k + 2)^(k - 1) / (k - 1)! * (2/7) * 6^k * (1 - (k + 1) / 2^k) * (1.6286 / m)^(k + 1)

або для великих м о

(1 - (1.5k - 2) / m)^(k - 1) / (k - 1)! * 0.465 * 9.772^k * (1 - (k + 1) / 2^k) / m^2

При k = 2, 3, 4, ... отримаємо таке:

k = 2: 11.1 * (1 - 1/m) / m^2
k = 3: 108 * (1 - 2.5/m)^2 / m^2 
k = 4: 486 * (1 - 4/m)^3 / m^2


k = 10: 10,065 * (1 - 13/m)^9 / m^2

Від k = 10 і далі число знову зменшується.


5
Ласкаво просимо до PPCG! Це відмінний аналіз; однак ми шукаємо відповіді, щоб бути законними відповідями на питання. Іншими словами, код. На жаль, це залишає в нашій структурі мізерний простір для публікацій лише для коментарів, які передаються коментарям до публікацій. Однак мені б не хотілося, щоб настільки ретельні зусилля були віднесені до нашої сльотової маси, тому я хотів би натякнути, що якщо ви додасте на свою посаду комп'ютерну програму, розроблену для відповіді на вимоги виклику, вона, швидше за все, буде збережена навколо.
Джонатан Ван Матре

1
Також настійно рекомендую ознайомитись із нашими сестринськими сайтами: math.stackexchange.com та mathoverflow.net
Джонатан Ван Матре
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.