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)
2 4バイトのゴルフを楽しみ、さらに4バイトの道を開いてくれた@xnorに感謝します!
オンラインでお試しください!
バックグラウンド
リコールそのウィルソンの定理のように述べているすべての整数についてのk> 1、
ここで、a≡b(mod d)は、a-bがdで均等に割り切れることを意味します。つまり、aとbはdで除算すると同じ残基を持ちます。
でダブルクリッ、ハイパー、サブのスーパー-階乗のためのウィルソンの定理、著者はこの答えが構築されている二重階乗のための一般化を証明します。整数k≥0の二重階乗は次のように定義されます
前述の論文の定理4は次のように述べています。
合同の両側を第4乗に引き上げると、
すべての奇数の素数pに対して。1以来!! = 1の場合、p = 2の場合も同等です。
さて、ウィルソンの定理に対して同じことを行うと、
以来
それに続く
いつでもpは素数です。
ここで、kを奇数の正の合成整数とします。定義により、k = abであるような整数a、b> 1が存在します。
以来、kが奇数であるので、ありそしてBが。したがって、両方ともシーケンス1、3、…、k-2および
どこ| 可分性を示します。
合計すると、すべての奇数の整数k> 1
ここで、P(k)= 1の場合、kは素数であり、P(k)が= 0ならばkは複合体です。
使い方
関数の場合fは単一の引数と呼ばれ、K、M、及びJに初期化されている3、1、および0。
なお- (2)!(K)4 = 1!4 = 1 = M。実際、等式m =((k-2)!!)4は常に成り立ちます。jはフロートであり、常に((k-4)!!)4%(k-2)/(k-2)に等しくなります。
一方で、K <Nの右引数がand
評価されます。以来( - 4)!!(k)はJ = 4%(K - 2)/(K - 2) 、最初の段落で証明されるよう、- J = 1 /(2 k)の場合、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
と評価/(K(K - 2))=((K - 2)+ K)/(K(K - 2))= 1 / K + 1 /(K - 2) - 2(1 K)ペアの場合(k-2、k)双子の素数で構成され、そうでない場合は0になります。
上記を計算した後、再帰呼び出しの戻り値に結果を追加しますf(n,k+2,m*k**4,m%k/k)
。kがインクリメントされます2それだけで奇数の値をとるように‡†、我々乗算MによってK 4のでMK 4 - =(2)!(K)4、K 4 =(K!)4、及び電流値を渡しますm%k / k – 「古い」kが素数の場合は1 / kに等しく、そうでない場合は0 – 関数呼び出しのパラメーターjとして。
最後に、kがn以上になると、fはFalseを返し、再帰は停止します。f(n)の戻り値は、すべての1 / k + 1 /(k-2)の合計になります。たとえば、(k-2、k)はツインプライムペアで、k <nです。
‡ 背景段落の結果は、奇数の整数に対してのみ有効です。整数であっても双子の素数にはならないため、安全にスキップできます。