戈德巴赫分区增加


9

哥德巴赫猜想指出:

每个大于2的偶数是两个质数之和。

我们将数字n的Goldbach分区视为两个素数对加到n上。我们关注的数字是戈德巴赫分区的增加。我们用该数字所有分区中最小素数的大小来度量该数字的Goldbach分区的大小。如果此大小大于所有较小的偶数的大小,则数字的分区增加。

任务

给定一个偶数n> 2,确定n是否具有递增的Goldbach分区,并输出两个唯一值,如果是,则输出一个,如果不是,则输出一个。

这是 ,因此您应努力减少源代码中的字节数。

OEIS A025018



这是一个好问题,很难理解。我对其进行了编辑以简化措辞。请进行检查,如果一切正确,请进行更改。
ЕвгенийНовиков

1
@ЕвгенийНовиков我发现您的编辑比原始编辑更令人困惑。我拒绝了。也许我们可以在这里讨论一种方法来使这一点更清楚。
Ad Hoc Garf Hunter

这些工作示例仍然非常令人困惑-他们似乎无处不在地提取数字,并且每个比较的表达方式都不同,而没有解释为什么使用某些数字。如果您已经知道答案,则可以解决。。。回到第一段,忽略示例,直到清楚为止,然后弄清楚示例的构造方式。也许某些表格结构会有所帮助,其中包括10个可能也会有所帮助
Neil Slater

@NeilSlater感谢您的反馈。我完全删除了这些示例,因为我认为这些示例弊大于利。我认为从解释中可以明显看出挑战所在,这些示例只会使事情复杂化。如果解释不充分,我将很乐意对此进行扩展或澄清,但是我不认为我会增加这些示例,因为它们似乎是迄今为止最大的混乱根源。
Ad Hoc Garf Hunter'7

Answers:


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 answer类似的逻辑。

(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)(再次)(再次)


@Olmman你喜欢吗?
尼迪尔

@Rod因为max带有键在应用键后返回具有最大值的元素,所以我不得不添加函数应用程序,但是它却更短。
埃德尼尔2017年

@Rod和我不能接受您的建议,range因为n它受限制于内部lambda
埃德尼尔2017年

@enedil确实,但是对于最大数量,您可以使用max(map(m,r[::2]))
Rod

1
您无需命名f,因此删除可以节省2个字节f=
Ad Hoc Garf Hunter'7

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 ...,都没有必要。
Ad Hoc Garf Hunter'7

^
太好了

你也可以让你的首要检查矮一点通过改变它all(n%i for i in range(2,g)),但你必须改变range(g)range(1,g),因为这给1.假阳性
特设Garf猎手
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.