lambda n:sum((n+n%6-3)*n%k<1for k in range(2,4*n))==2
Çevrimiçi deneyin!
Arka fon
Tüm tamsayılar, k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 tamsayılı olan aşağıdaki formlardan birini alır .
Yana 6K - 2 , 6K ve 6k + 2 tüm çift ve yana olan 3 - 6k bölünemeyen 3 dışındaki tüm asal, 2 ve 3 biçiminde olmalıdır 6k - 1 ya da 6k + 1 . İkiz asal çiftin farkı, (3, 5) hariç , 2 olduğundan , tüm ikiz asal çiftler (6k - 1, 6k + 1) formundadır .
N 6k ± 1 formunda olsun .
Eğer , n = 6K -1 , o , n + n% 6-3 = 6k - 1 + (6k - 1)% 6-3 = 6k + - Mayıs 01-03 = 6k + 1 .
Eğer , n = 6 k + 1 , daha sonra n + n% 6-3 = 6k + 1 + (6k + 1)% 6-3 = 6k + Ocak 01-03 = 6k - 1 .
Böylece, eğer n ikiz asal çifti ve bir parçasıdır n ≠ 3 , 's ikiz olacak n + n% 6-3 .
Nasıl çalışır
Python'un yerleşik bir birincillik testi yoktur. Tek bir sayıyı ilkellik için test etmenin kısa yolları olsa da, bunu iki sayı için yapmak uzun olacaktır. Bunun yerine bölenlerle çalışacağız.
sum((n+n%6-3)*n%k<1for k in range(2,4*n))
sayımları kaç tamsayı k aralığında [2, 4n) bölmek (n + n% 6-3) n- eşit, yani, bir bölenler sayısını sayan n + n% 6 (3 -) n- aralıkta [2 , 4n) . Bu sayımın sadece 2 olması ve n'nin ikiz asal çiftin bir parçası olması durumunda olduğunu iddia ediyoruz .
Eğer , n = 3 (ikiz birincil), (n + n% 6-3), n = 3 (3 + 3-3) = 9 iki bölenler (vardır 3 ve 9 olarak) [2, 12) .
Eğer n> 3 , daha önce görüldüğü gibi, ikiz asal m: = n + n% 6-3 olan ikiz olduğunu. Bu durumda, mn'nin tam dört böleni vardır: 1, m, n, mn .
Yana n> 3 , elimizdeki m> 4 , bu 4n <mn ve tam iki bölenler ( m, ve n, aralık içine) düşme [2, 4n) .
Eğer , n = 1 , daha sonra (n + n% 6-3) D = + 1-3 Ocak = -1 hiçbir bölenler sahiptir [2, 4) .
Eğer n = 2 ise , (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 , [2, 8) ' de bir bölen (kendisi ) içerir .
Eğer , n = 4 , daha sonra , (n + n% 6-3), n = 4 (4 + 4-3) = 20 , dört bölenler (sahiptir 2 , 4 , 5 , ve 10 de) [2, 16) .
Eğer , n> 4 bile, bir 2 , N / 2 , ve n, her bölme , n ve bu nedenle N - (3, n + n% 6) . N> 4'ten beri n / 2> 2 sahibiz , bu yüzden [2, 4n) ' de en az üç bölen var .
Eğer , n = 9 , daha sonra (n + n% 6-3), n = 9 (9 + 3-3) = 81 , üç bölenler (vardır 3 , 9 ve 21 de) [2, 36) .
Eğer n> 9 bir katıdır 3 , daha sonra 3 , n / 3 , ve n, her bölme , n , bu nedenle, ve n, - (% 3, 6 n + n) . N> 9'dan beri n / 3> 3 sahibiz , bu yüzden [2, 4n) ' de en az üç bölen var .
Son olarak, eğer n = 6k ± 1> 4 ikiz asal değilse, n veya m: = n + n% 6 - 3 bileşik olmalıdır ve bu nedenle d> 1 uygun bir böleni kabul etmelidir .
Ya da bu yana , n = m + 2 ya da m = n + 2 ve n, m> 4 , tam sayı d , m , ve n, olan ayrı bir bölenleri mn . Bundan başka, m <n + 3 <4n yana n> 1 , bu mn en az üç bölenler sahiptir [2, 4n) .