Goldbach bölümlerinin artırılması


9

Goldbach varsayımı şunları ifade eder:

2'den büyük her çift sayı iki asalın toplamıdır.

Bir sayısının bir Goldbach bölümünü ele alacağız n ekleyerek iki asal sayının bir çift olmaya n . Goldbach bölümünün sayılarının artmasından endişe duyuyoruz . Bir sayının Goldbach bölümlerinin boyutunu, bu sayının tüm bölümlerindeki en küçük asal boyutuna göre ölçeriz. Bu boyut, tüm küçük çift sayıların boyutundan büyükse, sayı giderek artan bir bölümdür.

Görev

Eşit bir n> 2 tamsayısı verildiğinde , n Goldbach bölümünü artırıp artırmadığını ve biri varsa ve biri değilse iki benzersiz değer verin.

Bu , bu nedenle kaynak kodunuzdaki bayt sayısını en aza indirmeyi amaçlamalısınız.

OEIS A025018



İyi bir soru, anlaşılması zor. İfadeyi basitleştirmek için düzenledim. Lütfen kontrol edin ve her şeyin doğru olup olmadığını değiştirin.
Евгений Новиков

1
@ ЕвгенийНовиков Düzenlemenizi orijinalinden daha kafa karıştırıcı buldum. Reddettim. Belki de burada bunu daha açık hale getirmenin bir yolunu tartışabiliriz .
Ad Hoc Garf Hunter

Çalışılan örnekler hala çok kafa karıştırıcıdır - sayıları hiç bir yerden çıkarmış gibi görünüyorlar ve karşılaştırmaların her biri, belirli sayıların neden kullanıldığını açıklamadan farklı şekilde ifade ediliyor. Cevabı zaten biliyorsanız, anlayabilirsiniz. . . ilk paragrafa geri dönüp, netleşene kadar örnekleri görmezden gelerek, örneklerin nasıl oluşturulduğunu anlayarak yaptım. Belki de bazı tabular yapı, 10 da dahil olmak üzere yardımcı olacaktır
Neil Slater

@NeilSlater Geri bildiriminiz için teşekkür ederiz. Örnekleri tamamen kaldırdım çünkü bence yarardan çok zarar veriyorlar. Bence meydan okuma açıklamadan açıkça anlaşılıyor ve örnekler sadece işleri karmaşıklaştırıyor. Açıklama yeterli değilse, bunu genişletmekten veya açıklığa kavuşturmaktan mutluluk duyarım, ancak örnekleri tekrar ekleyeceğimi düşünmüyorum çünkü şimdiye kadarki en büyük karışıklık kaynağı gibi görünüyorlar.
Ad Hoc Garf Hunter

Yanıtlar:


5

Jöle , 12 bayt

ÆRðfạṂ
Ç€M⁼W

Çevrimiçi deneyin!

Nasıl çalışır

Ç€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 bayt

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);

Çevrimiçi deneyin!

Expanded

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

Çevrimiçi deneyin! 1000'e kadar tüm sayıları kontrol edin


3

JavaScript (ES6), 135 bayt

Jörg'ün PHP cevabı ile benzer bir mantık kullanır .

(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

gösteri


2

Python 3: 156 151 142 138 136 128 bayt

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 sayesinde)

(@Rod sayesinde) (tekrar) (ve tekrar)


@Olmman hoşuna gitti mi?
enedil

@Kodu max, anahtar uygulandıktan sonra maksimum değere sahip öğe döndürdüğünden, işlev uygulaması eklemek zorunda kaldım, ancak yine de daha kısa.
enedil

@Rod ve ben gelince önerilerinizi alamaz rangeçünkü niçeride sınırlanmaktadır lambda.
enedil

@enedil Gerçekten, ama max için kullanabilirsinizmax(map(m,r[::2]))
Rod

1
Adını vermeniz gerekmez fve böylece 2 bayt'ı kaldırarak kaydedebilirsiniz f=.
Ad Hoc Garf Hunter

1

Python 3: 204196 bayt

Olm Man sayesinde kurtarılan bayt sayısı:

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

Çevrimiçi deneyin!


2
Birkaç ipucu, en yerleşik fonksiyonlar jeneratörleri argüman olarak alabilir minve allalabilir, bu da herkese min([...])kısaltılabilir min(...)ve aynı olabilir. Ayrıca bazı alanlardan, özellikle de import *parantez içindeki alandan ve herhangi bir alandan kurtulabilirsiniz, görüyorum ki, range(g)önce ve sonra bir tane var [i for i in ..., ikisi de gerekli değil.
Ad Hoc Garf Hunter

^ Bu harika, bilmiyordum
bendl

Ayrıca, ana kontrolünüzü değiştirerek biraz daha kısa yapabilirsiniz all(n%i for i in range(2,g)), ancak bunu değiştirmeniz range(g)gerekir, range(1,g)çünkü bu 1'de yanlış bir pozitif verir.
Ad Hoc Garf Hunter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.