lambda n:sum((n+n%6-3)*n%k<1for k in range(2,4*n))==2
Wypróbuj online!
tło
Wszystkie liczby całkowite przyjmują jedną z następujących postaci, z liczbą całkowitą k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Od 6k - 2 , 6k i 6k + 2 są parzyste, a ponieważ 6k - 3 można podzielić przez 3 , wszystkie liczby pierwsze oprócz 2 i 3 muszą mieć postać 6k - 1 lub 6k + 1 . Ponieważ różnica pary podwójnej liczby pierwszej wynosi 2 , z wyjątkiem (3, 5) , wszystkie pary liczb pierwszych mają postać (6k - 1, 6k + 1) .
Niech n będzie mieć postać 6k ± 1 .
Jeśli n = 6k -1 , to n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .
Jeśli n = 6k + 1 , to n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
Zatem jeśli n jest częścią podwójnej pary pierwszej, a n ≠ 3 , to jego bliźniak będzie wynosił n + n% 6-3 .
Jak to działa
Python nie ma wbudowanego testu pierwszeństwa. Chociaż istnieją krótkie sposoby na sprawdzenie pojedynczej liczby pod kątem pierwszeństwa, zrobienie tego dla dwóch liczb byłoby długotrwałe. Zamiast tego będziemy pracować z dzielnikami.
sum((n+n%6-3)*n%k<1for k in range(2,4*n))
zlicza liczbę całkowitą k w interwale [2, 4n) dzieli (n + n% 6 - 3) n równomiernie, tzn. zlicza liczbę dzielników (n + n% 6 - 3) n w przedziale [2 , 4n) . Twierdzimy, że liczba ta wynosi 2 wtedy i tylko wtedy, gdy n jest częścią podwójnej pary pierwszej.
Jeśli n = 3 (liczba podwójna), (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 ma dwa dzielniki ( 3 i 9 ) w [2, 12) .
Jeśli n> 3 jest podwójną liczbą pierwszą, jak widać wcześniej, m: = n + n% 6 - 3 jest jej bliźniakiem. W tym przypadku mn ma dokładnie cztery dzielniki: 1, m, n, mn .
Od n> 3 mamy m> 4 , więc 4n <mn i dokładnie dwa dzielniki ( m i n ) mieszczą się w przedziale [2, 4n) .
Jeśli n = 1 , to (n + n% 6 - 3) n = 1 + 1 - 3 = -1 nie ma dzielników w [2, 4) .
Jeśli n = 2 , to (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 ma jeden dzielnik (sam) w [2, 8) .
Jeśli n = 4 , to (n + n% 6 - 3) n = 4 (4 + 4 - 3) = 20 ma cztery dzielniki ( 2 , 4 , 5 i 10 ) w [2, 16) .
Jeżeli n> 4 jest parzyste, 2 , n / 2 , a n wszystkie dzielą n, a zatem (n + n% 6-3) n . Mamy n / 2> 2 od n> 4 , więc są co najmniej trzy dzielniki w [2, 4n) .
Jeśli n = 9 , to (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 ma trzy dzielniki ( 3 , 9 i 21 ) w [2, 36) .
Jeśli n> 9 jest wielokrotnością 3 , to 3 , n / 3 , a n wszystkie dzielą n, a zatem (n + n% 6-3) n . Mamy n / 3> 3 od n> 9 , więc są co najmniej trzy dzielniki w [2, 4n) .
Wreszcie, jeśli n = 6k ± 1> 4 nie jest liczbą podwójną, n lub m: = n + n% 6-3 musi być złożone i dlatego należy przyjąć odpowiedni dzielnik d> 1 .
Ponieważ albo n = m + 2 lub m = n + 2 i n, m> 4 , liczby całkowite d , m i n są odrębnymi dzielnikami mn . Ponadto, m <n + 3 <4n od n> 1 , więc mn ma co najmniej trzy dzielniki w [2, 4n) .