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 является частью пары простых чисел-близнецов.
Если n = 3 (двойное простое число), (n + n% 6 - 3) n = 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 , 4 , 5 и 10 ) в [2, 16) .
Если 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 имеет три делителя ( 3 , 9 и 21 ) в [2, 36) .
Если 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) .