Goldbachパーティションの増加


9

ゴールドバッハの予想は次のように述べている。

2より大きいすべての偶数は、2つの素数の合計です。

私たちは、数のゴールドバッハのパーティションを検討するn個に追加する2つの素数のペアであることを、Nゴールドバッハのパーティションが増加していることを懸念しています。数値のゴールドバッハパーティションのサイズは、その数値のすべてのパーティションの最小素数のサイズで測定します。このサイズがすべての小さい偶数のサイズよりも大きい場合、数値はパーティションの増加です。

仕事

n> 2の偶数の整数を指定して、nがGoldbachパーティションの増加であるかどうかを判別し、2つの一意の値を出力します。

これはなので、ソースコードのバイト数を最小限に抑えることを目指してください。

OEIS A025018



それは理解しにくい良い質問です。表現を簡単にするために編集しました。確認してください。すべて正しい場合は、変更を適用してください。
ЕвгенийНовиков

1
@ЕвгенийНовиковあなたの編集はオリジナルよりも混乱しました。拒否しました。おそらくここでこれをより明確にする方法を議論することができます
アドホックガーフハンター2017

機能する例は依然として非常に混乱しています-それらはどこからでも数字を引き出しているようであり、特定の数字が使用されている理由を説明せずに、比較のそれぞれが異なって表現されています。すでに答えがわかっている場合は、それを理解できます。。。最初の段落に戻り、明確になるまで例を無視し、例がどのように構成されているかを理解しました。おそらく、いくつかの表形式の構造が役立つでしょう。また、10を含めるとおそらく役立つでしょう
Neil Slater

@NeilSlaterフィードバックをありがとう。例よりも害が大きいと思うので、例を完全に削除しました。挑戦は説明から明らかだと思います、そして例は物事を複雑にするだけです。説明が不十分な場合は、それを拡張または明確化することで満足できますが、今のところ最大の混乱の原因であると思われるため、例を追加し直すことは考えていません。
アドホックガーフハンター2017

回答:


5

ゼリー、12バイト

ÆRðfạṂ
Ç€M⁼W

オンラインでお試しください!

使い方

Ç€M⁼W   Main link. Argument: n

Ç€      Map the helper link over [1, ..., n].
  M     Get all indices of the maximum.
    W   Wrap; yield [n].
   ⁼    Test the results to both sides for equality.


ÆRðfạṂ  Helper link. Argument: k

ÆR      Prime range; get all primes in R := [1, ..., k].
  ð     Begin a dyadic chain with arguments R and k.
    ạ   Absolute difference; yield k-p for each p in R.
   f    Filter; keep the q in R such that q = k-p for some p in R.
     Ṃ  Take the minimum.
        This yields 0 if the array is empty.

4

PHP、154バイト

for(;$n++<$a=$argn;$i-1?:$p[]=$n)for($i=$n;--$i&&$n%$i;);foreach($p as$x)foreach($p as$y)if(!$r[$z=$x+$y]){$r[$z]=$x;$l[]=$z<$a?$x:0;};echo$r[$a]>max($l);

オンラインでお試しください!

拡張

for(;$n++<$a=$argn;$i-1?:$p[]=$n) # loop through all integers till input if is prime add to array 
  for($i=$n;--$i&&$n%$i;);
foreach($p as$x) #loop through prime array
  foreach($p as$y) #loop through prime array 
    if(!$r[$z=$x+$y]){
      $r[$z]=$x; # add only one time lower value for a sum of $x+$y 
      $l[]=$z<$a?$x:0;}; # add lower value if sum is lower then input
echo$r[$a]>max($l); # Output 1 if lower value for sum of input is greater then all lower values of all numbers under input

オンラインでお試しください!1000までのすべての数字を確認する


3

JavaScript(ES6)、135バイト

JörgのPHP回答と同様のロジックを使用します

(n,P=[...Array(n).keys()].filter(n=>(p=n=>n%--x?p(n):x==1)(x=n)))=>P.map(p=>P.map(q=>a[q+=p]=a[q]||(m=q<n&&p>m?p:m,p)),a=[m=0])&&a[n]>m

デモ


2

Pythonの3:156の 151 142 138 136 128バイト

r=range
m=lambda n:min(x for x in r(2,n+1)if all(o%i for o in[x,n-x]for i in r(2,o)))
f=lambda n:m(n)>max(map(m,r(2,n,2)))or n<5

(OPに感謝)

(@Rodに感謝)(再び)(そして再び)


@オルマン、好きですか?
エンディル2017

@Rodを使用するmaxと、キーを適用した後に最大値を持つ要素が返されるため、関数アプリケーションを追加する必要がありましたが、それでも短いです。
エンディル2017

@Rodとは内部に囲まれているためrange、提案を受け入れることはできません。nlambda
エンディル2017

@enedil確かに、ただし最大で使用できますmax(map(m,r[::2]))
Rod

1
名前を付ける必要がないためf、を削除することで2バイトを節約できますf=
アドホックガーフハンター2017

1

Python 3:204 196バイト

おかげでバイトを節約:Olm Man

from itertools import*
m=lambda g:min([x for x in product([n for n in range(2,g)if all(n%i for i in range(2,n))],repeat=2)if sum(x)==g][0])
i=lambda g:1if all(m(g)>m(x)for x in range(4,g,2))else 0

オンラインでお試しください!


2
いくつかのヒント、ほとんどの組み込み関数のようにminallジェネレーターを引数として使用できます。これは、min([...])短縮しmin(...)てもすべて同じであることを意味します。また、いくつかのスペース、特にimport *中括弧内のスペースと中括弧の後のスペースを取り除くこともできます。後range(g)と前[i for i in ...に1つあるので、どちらも必要ありません。
アドホックガーフハンター2017

^それは素晴らしいです、私はそれを知りませんでした
bendl

また、あなたはそれを変更することによって、少し短く、あなたの素数のチェックを行うことができますall(n%i for i in range(2,g))が、あなたは変更する必要range(g)range(1,g)これが1に偽陽性を与えるので
アドホックGARFハンター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.