lambda n:sum((n+n%6-3)*n%k<1for k in range(2,4*n))==2
Спробуйте в Інтернеті!
Фон
Всі цілі числа приймають одну з таких форм, з цілим числом k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Оскільки 6k - 2 , 6k і 6k + 2 є парними, а оскільки 6k - 3 ділиться на 3 , усі прости, крім 2 і 3, повинні мати вигляд 6k - 1 або 6k + 1 . Оскільки різниця парної простої пари становить 2 , за винятком (3, 5) , всі пари прості близнюки мають вигляд (6k - 1, 6k + 1) .
Нехай n має вигляд 6k ± 1 .
Якщо n = 6k -1 , то n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .
Якщо n = 6k + 1 , то n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
Таким чином, якщо n є частиною пари близнюків, а n ≠ 3 , то близнюк буде n + n% 6 - 3 .
Як це працює
У Python немає вбудованого тесту первинності. Незважаючи на те, що існують короткі способи тестування єдиного числа на первинність, але для двох чисел це буде тривалим. Ми замість цього будемо працювати з дільниками.
sum((n+n%6-3)*n%k<1for k in range(2,4*n))
підраховує, скільки цілих чисел k в інтервалі [2, 4n) рівномірно ділить (n + n% 6 - 3) n , тобто рахує кількість дільників (n + n% 6 - 3) n в інтервалі [2 , 4н) . Ми стверджуємо, що цей підрахунок дорівнює 2, якщо і тільки тоді, коли n є частиною пари близнюків.
Якщо п = 3 (подвійний просте число), (п + п% 6 - 3) п = 3 (3 + 3 - 3) = 9 має два дільників ( 3 і 9 ) в [2, 12) .
Якщо n> 3 - близнюк-близнюк, як видно раніше, m: = n + n% 6 - 3 - його близнюк. У цьому випадку mn має рівно чотири дільники: 1, m, n, mn .
Оскільки n> 3 , маємо m> 4 , тому 4n <mn і рівно два дільники ( m і n ) потрапляють у проміжок [2, 4n) .
Якщо n = 1 , то (n + n% 6 - 3) n = 1 + 1 - 3 = -1 не має дільників у [2, 4) .
Якщо n = 2 , то (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 має один дільник (сам) у [2, 8) .
Якщо n = 4 , то (n + n% 6 - 3) n = 4 (4 + 4 - 3) = 20 має в [2, 16) чотири дільники ( 2 , 4 , 5 та 10 ) .
Якщо n> 4 парне, 2 , n / 2 , і n всі ділять n і, отже, (n + n% 6 - 3) n . Ми маємо n / 2> 2, оскільки n> 4 , тому в [2, 4n) є щонайменше три дільники .
Якщо n = 9 , то (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 має в [2, 36) три дільники ( 3 , 9 і 21 ) .
Якщо n> 9 кратне 3 , то 3 , n / 3 і n всі ділять n і, отже, (n + n% 6 - 3) n . Ми маємо n / 3> 3 з n> 9 , тому в [2, 4n) є щонайменше три дільники .
Нарешті, якщо n = 6k ± 1> 4 не є близнюком-близнюком, або n або m: = n + n% 6 - 3 має бути складеним, і, отже, визнати власний дільник d> 1 .
Оскільки або n = m + 2, або m = n + 2 і n, m> 4 , цілі числа d , m і n є різними дільниками mn . Крім того, m <n + 3 <4n, оскільки n> 1 , тому mn має щонайменше три дільники в [2, 4n) .