lambda n:sum((n+n%6-3)*n%k<1for k in range(2,4*n))==2
Hãy thử trực tuyến!
Lý lịch
Tất cả các số nguyên có một trong các dạng sau, với số nguyên k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Vì 6k - 2 , 6k và 6k + 2 đều chẵn và vì 6k - 3 chia hết cho 3 , nên tất cả các số nguyên tố trừ 2 và 3 phải có dạng 6k - 1 hoặc 6k + 1 . Vì sự khác biệt của cặp số nguyên tố sinh đôi là 2 , ngoại trừ (3, 5) , tất cả các cặp số nguyên tố sinh đôi đều có dạng (6k - 1, 6k + 1) .
Đặt n có dạng 6k ± 1 .
Nếu n = 6k -1 , thì n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .
Nếu n = 6k + 1 , thì n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
Do đó, nếu n là một phần của cặp nguyên tố sinh đôi và n 3 , thì cặp song sinh đó sẽ là n + n% 6 - 3 .
Làm thế nào nó hoạt động
Python không có kiểm tra tính nguyên thủy tích hợp. Mặc dù có nhiều cách ngắn để kiểm tra một số duy nhất cho tính nguyên thủy, nhưng làm như vậy cho hai số sẽ dài. Thay vào đó, chúng tôi sẽ làm việc với các ước.
sum((n+n%6-3)*n%k<1for k in range(2,4*n))
đếm có bao nhiêu số nguyên k trong khoảng [2, 4n) chia (n + n% 6 - 3) n , tức là, nó đếm số ước của (n + n% 6 - 3) n trong khoảng [2 , 4n) . Chúng tôi tuyên bố rằng số này là 2 khi và chỉ khi n là một phần của cặp số nguyên tố sinh đôi.
Nếu n = 3 (một số nguyên tố sinh đôi), (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 có hai ước ( 3 và 9 ) trong [2, 12) .
Nếu n> 3 là số nguyên tố sinh đôi, như đã thấy trước đó, m: = n + n% 6 - 3 là số nguyên tố của nó. Trong trường hợp này, mn có đúng bốn ước: 1, m, n, mn .
Vì n> 3 , chúng ta có m> 4 , vì vậy 4n <mn và chính xác hai ước ( m và n ) rơi vào khoảng [2, 4n) .
Nếu n = 1 , thì (n + n% 6 - 3) n = 1 + 1 - 3 = -1 không có ước số trong [2, 4) .
Nếu n = 2 , thì (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 có một ước (chính nó) trong [2, 8) .
Nếu n = 4 , thì (n + n% 6 - 3) n = 4 (4 + 4 - 3) = 20 có bốn ước ( 2 , 4 , 5 và 10 ) trong [2, 16) .
Nếu n> 4 là chẵn, 2 , n / 2 và n đều chia n và, do đó, (n + n% 6 - 3) n . Chúng ta có n / 2> 2 kể từ n> 4 , do đó, có ít nhất ba ước số trong [2, 4n) .
Nếu n = 9 , thì (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 có ba ước ( 3 , 9 và 21 ) trong [2, 36) .
Nếu n> 9 là bội của 3 , thì 3 , n / 3 và n đều chia n và, do đó, (n + n% 6 - 3) n . Chúng ta có n / 3> 3 kể từ n> 9 , do đó, có ít nhất ba ước số trong [2, 4n) .
Cuối cùng, nếu n = 6k ± 1> 4 không phải là số nguyên tố sinh đôi, thì n hoặc m: = n + n% 6 - 3 phải là hợp số và do đó, thừa nhận một ước số thích hợp d> 1 .
Vì n = m + 2 hoặc m = n + 2 và n, m> 4 , các số nguyên d , m và n là các ước số riêng biệt của mn . Hơn nữa, m <n + 3 <4n kể từ n> 1 , vì vậy mn có ít nhất ba ước trong [2, 4n) .