Python 3 , 78 77 75 70 68 62 ไบต์
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)
ขอบคุณ @xnor สำหรับการตีกอล์ฟ2 4 ไบต์และปูทางไปอีก 4 ลูก!
ลองออนไลน์!
พื้นหลัง
จำได้ว่าวิลสันทฤษฎีบทของรัฐว่า integers ทั้งหมดk> 1 ,
ที่≡ข (สมัยง)หมายความว่าa - bหารเท่า ๆ กันโดยdคือและBมีสารตกค้างเดียวกันเมื่อหารด้วยd
ในทฤษฎีบทของวิลสันสำหรับ Double-, Hyper-, Sub- และ Super-factorialsผู้เขียนพิสูจน์ภาพรวมของแฟคทอเรียลคู่ซึ่งคำตอบนี้สร้างขึ้น ปัจจัยคู่ของจำนวนเต็มk ≥ 0จะถูกกำหนดโดย
ทฤษฎีบทที่ 4 ของกระดาษข้างต้นระบุดังต่อไปนี้
การยกระดับความสอดคล้องทั้งสองด้านให้เท่ากับกำลังสี่เราอนุมานได้ว่า
สำหรับช่วงเวลาที่แปลกทั้งหมดp . ตั้งแต่1 !! = 1 , ความเท่าเทียมถือยังp = 2
ทีนี้การทำเช่นเดียวกันกับทฤษฎีของวิลสันก็เผยให้เห็น
ตั้งแต่
มันเป็นไปตามนั้น
เมื่อใดก็ตามที่pเป็นนายก
ตอนนี้ให้kเป็นจำนวนเต็มคี่บวกและเชิงบวก ตามคำนิยามมีอยู่ integers A, B> 1ดังกล่าวที่k = AB
ตั้งแต่kเป็นเลขคี่ดังนั้นและข ดังนั้นทั้งคู่จึงเกิดขึ้นในลำดับที่1, 3, …, k - 2และ
ที่ไหน| หมายถึงการหาร
สรุปสำหรับจำนวนเต็มคี่ทั้งหมดk> 1
โดยที่p (k) = 1ถ้าkเป็นจำนวนเฉพาะและp (k) = 0ถ้าkประกอบกัน
มันทำงานอย่างไร
เมื่อฟังก์ชั่นฉเรียกว่ามีเพียงหนึ่งเดียวอาร์กิวเมนต์k , มและเจจะเริ่มต้นเป็น3 , 1และ0
โปรดทราบว่า((k - 2) !!) 4 = 1 !! 4 = 1 = m อันที่จริงความเสมอภาคm = ((k - 2) !!) 4จะถืออยู่ตลอดเวลา Jเป็นลอยและมักจะเท่ากับ((k - 4) !!) 4 % (k - 2) / (k - 2)
ในขณะที่k <nอาร์กิวเมนต์ที่ถูกต้องand
จะได้รับการประเมิน ตั้งแต่j = ((k - 4) !!) 4 % (k - 2) / (k - 2)ตามที่พิสูจน์ในวรรคแรกj = 1 / (k - 2)ถ้าk - 2เป็นไพร์มและj = 0ถ้าไม่ใช่ เช่นเดียวกันเนื่องจากm% k = ((k - 2) !!) 4เท่ากับ1ถ้าkเป็นจำนวนเฉพาะและ0ถ้าไม่ใช่-m% k = k - 1หากkเป็นจำนวนเฉพาะและ-m% k = 0ถ้าไม่ ดังนั้น-m%k*j*2/k
ประเมินเป็น2 (k - 1) / (k (k - 2)) = ((k - 2) + k) / (k (k - 2)) = 1 / k + 1 / (k - 2)ถ้าทั้งคู่(k - 2, k)ประกอบด้วยช่วงเวลาแฝดและ0หากไม่ได้
f(n,k+2,m*k**4,m%k/k)
หลังจากการคำนวณข้างต้นเราเพิ่มผลให้ค่าตอบแทนของโทร recursive kเพิ่มขึ้น2ดังนั้นมันจึงใช้ค่าคี่เท่านั้น‡‡เราคูณmด้วยk 4ตั้งแต่mk 4 = ((k - 2) !!) 4 k 4 = (k !!) 4และผ่านค่าปัจจุบันของm% k / k - ซึ่งเท่ากับ1 / kถ้า "old" kเป็นค่าเฉพาะและ0ถ้าไม่ใช่ - เป็นพารามิเตอร์jสำหรับการเรียกใช้ฟังก์ชัน
สุดท้ายเมื่อkเท่ากับหรือมากกว่าn , Fจะกลับเท็จหยุดและเรียกซ้ำ ค่าส่งคืนของf (n)จะเป็นผลรวมของ1 / k + 1 / (k - 2)เช่น(k - 2, k)เป็นคู่คู่ที่สำคัญและk <nตามที่ต้องการ
‡ ผลลัพธ์จากย่อหน้าพื้นหลังมีไว้สำหรับจำนวนเต็มคี่เท่านั้น เนื่องจากจำนวนเต็มไม่สามารถเป็นช่วงเวลาแฝดเราจึงสามารถข้ามได้อย่างปลอดภัย