Python 3 , 78 77 75 70 68 62 byte
f=lambda n,k=3,m=1,j=0:k<n and-m%k*j*2/k+f(n,k+2,m*k**4,m%k/k)
Cảm ơn @xnor đã chơi golf 2 4 byte và mở đường cho 4 người nữa!
Hãy thử trực tuyến!
Lý lịch
Hãy nhớ lại rằng định lý Wilson nói rằng với mọi số nguyên k> 1 ,
trong đó a ≡ b (mod d) có nghĩa là a - b chia hết cho d , nghĩa là a và b có cùng dư khi chia cho d .
Trong Định lý Wilson cho Double-, Hyper-, Sub- và Super-factorial , các tác giả đã chứng minh sự khái quát hóa cho các giai thừa kép, trên đó câu trả lời này được xây dựng. Giai thừa kép của một số nguyên k 0 được xác định bởi
Định lý 4 của bài báo đã nêu ở trên.
Nâng cao cả hai mặt của sự phù hợp với quyền lực thứ tư, chúng tôi suy luận rằng
cho tất cả các số nguyên tố lẻ p . Kể từ 1 !! = 1 , tương đương giữ cho p = 2 .
Bây giờ, làm tương tự với định lý của Wilson cho thấy rằng
Kể từ khi
nó theo đó
Bất cứ khi nào p là số nguyên tố.
Bây giờ, hãy để k là một số nguyên lẻ, dương, tổng hợp. Theo định nghĩa, tồn tại các số nguyên a, b> 1 sao cho k = ab .
Vì k là số lẻ nên a và b cũng vậy . Do đó, cả hai xảy ra trong chuỗi 1, 3, Nhận, k - 2 và
ở đâu | chỉ ra sự chia rẽ.
Tổng hợp, cho tất cả các số nguyên lẻ k> 1
trong đó p (k) = 1 nếu k là số nguyên tố và p (k) = 0 nếu k là hợp số.
Làm thế nào nó hoạt động
Khi hàm f được gọi với một đối số duy nhất, k , m và j được khởi tạo là 3 , 1 và 0 .
Lưu ý rằng ((k - 2) !!) 4 = 1 !! 4 = 1 = m . Trong thực tế, đẳng thức m = ((k - 2) !!) 4 sẽ giữ mọi lúc. j là số float và sẽ luôn bằng ((k - 4) !!) 4 % (k - 2) / (k - 2) .
Trong khi k <n , đối số đúng của and
sẽ được đánh giá. Vì j = ((k - 4) !!) 4 % (k - 2) / (k - 2) , như đã được chứng minh trong đoạn đầu tiên, j = 1 / (k - 2) nếu k - 2 là số nguyên tố và j = 0 nếu không. Tương tự, vì m% k = ((k - 2) !!) 4 bằng 1 nếu k là số nguyên tố và 0 nếu không, -m% k = k - 1 nếu k là số nguyên tố và -m% k = 0 nếu không. Do đó, ước tính -m%k*j*2/k
thành 2 (k - 1) / (k (k - 2)) = ((k - 2) + k) / (k (k - 2)) = 1 / k + 1 / (k - 2) nếu cặp (k - 2, k)bao gồm các số nguyên tố sinh đôi và 0 nếu không.
Sau khi tính toán ở trên, chúng tôi thêm kết quả vào giá trị trả về của cuộc gọi đệ quy f(n,k+2,m*k**4,m%k/k)
. k được tăng lên 2 nên chỉ lấy các giá trị lẻ ‡ , chúng ta nhân m với k 4 vì mk 4 = ((k - 2) !!) 4 k 4 = (k !!) 4 và vượt qua giá trị hiện tại của m% k / k - bằng 1 / k nếu "cũ" k là số nguyên tố và 0 nếu không - như tham số j cho lệnh gọi hàm.
Cuối cùng, một khi k bằng hoặc lớn hơn n , f sẽ trả về Sai và dừng đệ quy. Giá trị trả về của f (n) sẽ là tổng của tất cả 1 / k + 1 / (k - 2) như vậy (k - 2, k) là một cặp số nguyên tố sinh đôi và k <n , như mong muốn.
‡ Các kết quả từ những nền đoạn giữ chỉ dành cho số nguyên lẻ. Vì các số nguyên thậm chí không thể là số nguyên tố sinh đôi, chúng ta có thể bỏ qua chúng một cách an toàn.