การคาดเดาของ Goldbach


15

เขียนโปรแกรมที่พร้อมท์ให้ผู้ใช้รับจำนวนเต็มคู่ที่มากกว่า 2

จากการคาดคะเนของ Goldbach ว่าทุก ๆ เลขคู่ที่มากกว่า 2 สามารถแสดงเป็นผลรวมของสองช่วงเวลาพิมพ์จำนวนเฉพาะสองตัวซึ่งเมื่อรวมเข้าด้วยกันให้ระบุจำนวนคู่ที่ร้องขอ แก้ไข: โปรแกรมจะต้องพิมพ์ A PAIR of primes เท่านั้นไม่ใช่ทั้งหมด ตัวอย่างเช่น:

4: 2 + 2

6: 3 + 3

8: 3 + 5

10: 5 + 5 หรือ 3 + 7


"ต้องพิมพ์เฉพาะช่วงเวลาเท่านั้น"นั่นหมายความว่าเราได้รับอนุญาตให้พิมพ์คู่เพิ่มเติมหรือไม่
Ayiko

ฉันคิดว่ามันสั้นลงความยาวของรหัสของคุณ แต่ควรจัด
Rationality

คำตอบ:


11

APL, 34 หรือ 44 ไบต์

รุ่นแรกมีความยาว34สัญลักษณ์และถูก จำกัด ให้ใช้อักขระจากชุดอักขระ APL แบบไบต์เดียวดั้งเดิมเช่นที่ยังคงรองรับใน Dyalog APL:

↑c/⍨n=+/¨c←,∘.,⍨v/⍨~v∊v∘.×v←1↓⍳n←⎕

คำอธิบาย:

                               n←⎕   ⍝ ask for a number, store as n
                          v←1↓⍳n     ⍝ generate all integers from 2 to n
                      v∘.×v          ⍝ compute the product table of any two such integers
                v/⍨~v∊               ⍝ select those that don't appear in the product table 
         c←,∘.,⍨                     ⍝ generate all possible pairs of these primes
    n=+/¨c                           ⍝ check which pairs have a sum equal to n
↑c/⍨                                 ⍝ take the first that does

รุ่นที่สองมีความยาวเพียง22สัญลักษณ์เพราะมันใช้ประโยชน์จากπฟังก์ชันเพื่อตรวจสอบหมายเลขเฉพาะ แต่มีเฉพาะในNARS2000ซึ่งใช้ Unicode ดังนั้นจำนวนไบต์คือ44ใน UCS-2:

2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1

คำอธิบาย:

                   ⎕    ⍝ ask for a number N
                  ⍳ -1  ⍝ generate all naturals from 1 to N-1
             (⍪,⌽)      ⍝ arrange it into a table of all pairs of naturals with sum N
     {∧/0π⍵}            ⍝ check which pairs are made of all primes
2⍴(⌿⍨       )           ⍝ return the first pair that does

ตัวอย่าง

(⎕: เป็นพรอมต์ถามหมายเลข)

      2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1
⎕:
      4
2 2
      2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1
⎕:
      6
3 3
      2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1
⎕:
      8
3 5
      2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1
⎕:
      124
11 113

จะ¯2π⍳2πnทำงานเป็นเครื่องกำเนิดที่สำคัญได้อย่างไร
Oberon

@Oberon πผู้ปฏิบัติงานทำอะไรกันแน่
primo

πสวิตช์Dyadic ด้วย: ¯2πxคำนวณค่า xth prime, ¯1πxเป็น Prime แรกน้อยกว่า x, 0πxทดสอบ x สำหรับ primality, 1πxเป็น Prime แรกที่มากกว่า x, 2πxจำนวน primes น้อยกว่า x, 10πxคือจำนวนตัวหารของ x, 11πxเป็นผลรวม ของตัวหารทั้งหมดของ x 12πxและ13πxเป็นฟังก์ชันMöbiusและ totient ตามลำดับ สุดท้าย แต่ไม่ท้ายสุด monadic πxจะคืนค่าการแยกตัวประกอบเฉพาะของ x
Oberon

@Oberon เฉพาะ NARS2000 ใช่ไหม ดูเหมือนว่าจะเป็นล่ามที่น่าสนใจ ฉันจะลองและแก้ไขคำตอบของฉัน
เบีย

@Tobia มันคืออะไร? ขออภัยด้วย ฉันเห็นมันอ้างอิงบางแห่ง แต่พวกเขาไม่เคยพูดถึง NARS2000 ดีแล้วที่รู้.
Oberon

6

Python 2, 75 71 ไบต์

n=input();k=m=1;p={0}
while{n-k,k}-p:m*=k*k;k+=1;p|={m%k*k}
print n-k,k

ทดสอบบนIdeone

มันทำงานอย่างไร

เราใช้ข้อพิสูจน์ของทฤษฎีบทของวิลสัน :

corollary of Wilson's theorem

ตลอดเวลาตัวแปรmเท่ากับจตุรัสของแฟคทอเรียลของk - 1 ; kเริ่มต้นที่มูลค่า1และม.มูลค่าที่0! ² = 1 ชุดpจะประกอบด้วย0และจำนวนเฉพาะทั้งหมดจนถึงค่าปัจจุบันของk k

ในการวนซ้ำแต่ละครั้งแรกเราตรวจสอบว่าทั้งn - kและkเป็นของpซึ่งเป็นจริงถ้าหากความแตกต่างของเซต{nk, k}และpว่างเปล่า ถ้าเป็นเช่นนั้นเงื่อนไขจะเป็นเท็จและมีการวนซ้ำต่อไป

โปรดทราบว่าk> 0และ{n - k, k}จะทำให้เงื่อนไขเป็นไปตามค่าบวกของn - k (สมมติว่าการคาดคะเนของ Goldbach เป็นจริง) ดังนั้น0ในpจะไม่นำไปสู่ผลบวกปลอม

ในวงเราปรับปรุงkและม. ค่าใหม่ของmคือm ×k² = (k - 1)! ²×k² = k! ²และค่าใหม่ของkคือk + 1ดังนั้นm = (k - 1)! ²ยังคงถือก่อนและหลัง การอัปเดต

จากนั้นเราจะดำเนินการสหภาพชุดเพื่อเพิ่มมูลค่าของเมตร% k × kเพื่อP จากผลของทฤษฎีบทของวิลสันสิ่งนี้จะเพิ่ม1 × k = kถ้าkเป็นจำนวนเฉพาะและ0 × k = 0ถ้าไม่ใช่

เมื่อวงปลายเราพิมพ์ค่าสุดท้ายของn - kและkซึ่งจะเป็นช่วงเวลาที่มีผลรวมn


อัลกอริธึมสร้างไพรม์ทำงานบนโลกอย่างไร?
Leun Nun

@LeakyNun ฉันได้เพิ่มคำอธิบายแล้ว
เดนนิส

โอ้ ... นั่นคืออัจฉริยะ
Leun Nun


4

PHP - 73 ไบต์

<?for(;@($n%--$$n?:$o=&$argv[1]>$$n=++$n)||${++$b}^${--$o};);echo"$b+$o";

อินพุตถูกใช้เป็นอาร์กิวเมนต์บรรทัดคำสั่ง

ตัวอย่างการใช้งาน:

$ php goldbach.php 7098
19+7079

4

GolfScript 41 33 32

~(,2>.-1%]zip{{.,2>\{\%!}+,},!}?

ยอมรับอาร์กิวเมนต์บรรทัดคำสั่งเช่น

echo "14" | ruby golfscript.rb goldbach.gs
-> [2 12]

ค้นหาพาร์ติชันที่เกี่ยวข้องทั้งหมดของหมายเลขอินพุตด้วย:

(,2>.-1%]zip  #If only zip were a one-character command!  It is so often useful.

จากนั้นค้นหาพาร์ติชันแรกที่ไม่มีหมายเลขใดไม่โดดเด่นด้วย:

{np,!}? #For each partition, filter down to elements that are not prime, and only accept if there are no such results (since [] is falsey).

ที่บล็อกการตรวจสอบคอมโพสิตnpคือ:

{.,2>\{\%!}+,}

บล็อกนี้จะกรองลงไปที่ตัวเลขทั้งหมดที่แบ่งจำนวนที่เท่ากัน หากไม่มีตัวเลขดังกล่าว (ดังนั้นตัวเลขจึงเป็นจำนวนเฉพาะ) ผลลัพธ์คือ[]ซึ่งเป็นเท็จใน GolfScript



3

R, 170 112 83 ตัวอักษร

a=scan();b=2:a;p=b[rowSums(!outer(b,b,`%%`))<2];q=p[(a-p)%in%p][1];cat(a,":",q,a-q)

เยื้อง:

a=scan() #Take user input as a numeric
b=2:a
p=b[rowSums(!outer(b,b,`%%`))<2] #Find all primes from 2 to user input
q=p[(a-p)%in%p][1] #Check which a-p also belong to p and takes the first one
cat(a,":",q,a-q)

การใช้งาน:

> a=scan();b=2:a;p=b[rowSums(!outer(b,b,`%%`))<2];q=p[(a-p)%in%p][1];cat(a,":",q,a-q)
1: 72
2: 
Read 1 item
72 : 5 67 

วิธีการแก้ปัญหาเก่าที่ 112 อักขระสำหรับลูกหลาน

a=scan();b=2:a;p=b[rowSums(!outer(b,b,`%%`))<2];w=which(outer(p,p,`+`)==a,T);cat(a,":",p[w[1,1]],p[w[1,2]])

เยื้อง:

a=scan()
b=2:a
p=b[rowSums(!outer(b,b,`%%`))<2]
w=which(outer(p,p,`+`)==a,T) #Find the index of valid combinations
cat(a,":",p[w[1,1]],p[w[1,2]]) #Prints the first valid combination

นี่มันบ้าและใจดีจริงๆ !!
โทมัส

3

Python - 107

โดยพื้นฐานแล้วการปรับปรุงในส่วนที่สองของคำตอบของ nutria (ฉันใช้มันใน 2.7 แต่ฉันคิดว่ามันควรจะได้ผลสำหรับ 3.x ด้วย)

p=lambda x:all(x%i!=0 for i in range(2,x))
n=input()
for i in range(2,n-1):
    if p(i)&p(n-i): print i,n-i

มีการขึ้นบรรทัดใหม่และช่องว่างหลังจาก:บังคับหรือไม่
mniip

แท็บอาจถูกลดขนาดให้เหลือพื้นที่และพื้นที่ก่อนที่จะสามารถลบการพิมพ์ออกได้ (ประหยัด 4 ไบต์)
clismique

3

JavaScript (ES6) (Regex), 105

a=/^(xx+?)(?!(xx+)\2+$)x*(?=\1$)(?!(xx+)\3+$)/.exec("x".repeat(prompt()));alert(a[1].length+"+"+a[0].length)

ตอนนี้คุณมี regex ที่ทดสอบการคาดคะเนของ Goldbach ซึ่งมีความต้องการต่ำในคุณสมบัติพิเศษ (การสนับสนุนการอ้างอิงย้อนกลับขั้นพื้นฐานการมองในเชิงบวกและเชิงลบ)

สิ่งนี้ใช้String.prototype.repeat()ซึ่งเป็นส่วนหนึ่งของข้อเสนอ EcmaScript รุ่นที่ 6 ปัจจุบันรหัสนี้ใช้ได้กับ Firefox เท่านั้น

ฉันต้องการภาษาที่ดีกว่าที่มีคำสั่ง terse เมื่อทำงานกับ regex ...


2

สกาลา, 286 192 172 148 ตัวอักษร

ไม่ใช่วิธีที่เร็วที่สุด แต่ใช้งานได้ โทร g (10) เพื่อรับรายการคู่ทองคำในราคา 10

def g(n:Int)={def p(n:Int,f:Int=2):Boolean=f>n/2||n%f!=0&&p(n,f+1)
s"$n : "+(for(i<-2 to n/2;j=n-i if p(i)&&p(j))yield s"$i + $j").mkString(" or ")}

การแปลงเป็น C ++ นั้นตรงไปตรงมา


2

C - 139 129 ตัวอักษร

a,b;i(x,y){return x>y?x%y?i(x,y+1):0:x>1;}main(){scanf("%i",&a);for(b=a/2;b-->1;)i(b,2)&&i(a-
b,2)&&printf("%i:%i+%i\n",a,b,a-b);}

คุณสามารถโกน 8 ตัวอักษรโดยการเอาintdeclarations iในการทำงานของคุณ คุณสามารถบันทึกอีก 2 ตัวอักษรโดยการลบifและเพิ่มในเครื่องหมายและคู่อื่น:i(b,2)&&i(a-b,2)&&printf(...)
จอช

ขอบคุณ! ไม่ได้คิด&&อย่างนั้น (ฉันจะไม่ชินกับการโต้เถียงประเภทเงียบงัน ... )
Oberon

ฉันรักการใช้งานประกอบไปด้วยไตรภาค
Josh

2

newLISP - 169 148 ตัวอักษร

(define(p n)(=(length(factor n))1))
(define(g n)(when(even? n)(for(i 3 n 2)
(and(p i)(p(- n i))(println n {: } i { }(- n i))))))
(g(int(read-line)))

รวมถึงรหัสเพื่อเรียกใช้ ผลที่ได้ก็คือ ...

72: 5 67
72: 11 61
72: 13 59
72: 19 53
72: 29 43
72: 31 41
72: 41 31
72: 43 29
72: 53 19
72: 59 13
72: 61 11
72: 67 5


2

Sage , 65 62

n=input()
i=0
p=is_prime
while p(i)*p(n-i)==0:i+=1
print i,n-i

ในไฟล์ด้านบนgoldbach.sageให้รันด้วย Sage ที่รันในเทอร์มินัล:

sage: %runfile goldbach.sage 

ขอบคุณ @boothby สำหรับp=is_primeความคิด


คุณสามารถได้รับการลงนี้ถึง 62 p=is_primeโดยการตั้งค่า
บูธตาม

2

Haskell, 97C

g n=head[(a,b)|let q=p n,a<-q,b<-q,a+b==n]
p n=filter c[2..n]
c p=null[x|x<-[2..p-1],p`mod`x==0]

คำอธิบาย:

  • gเป็นฟังก์ชั่น "goldbach" การโทรg nให้คู่ของช่วงเวลาที่รวมเข้าnด้วยกัน
  • p เป็นฟังก์ชั่นที่สร้างรายการของจำนวนเฉพาะน้อยกว่า nเป็นฟังก์ชั่นที่สร้างรายชื่อของช่วงเวลาน้อยกว่า
  • c เป็นฟังก์ชันตัวตรวจสอบเฉพาะที่ใช้เพื่อกำหนด pเป็นฟังก์ชั่นการตรวจสอบที่สำคัญที่ใช้ในการกำหนด

ตัวอย่างการทำงาน:

*Main> g 4
(2,2)
*Main> g 6
(3,3)
*Main> g 8
(3,5)
*Main> g 10
(3,7)
*Main> g 12
(5,7)
*Main> map g [4,6..100]
[(2,2),(3,3),(3,5),(3,7),(5,7),(3,11),(3,13),(5,13),(3,17),(3,19),(5,19),(3,23),(5,23),(7,23),(3,29),(3,31),(5,31),(7,31),(3,37),(5,37),(3,41),(3,43),(5,43),(3,47),(5,47),(7,47),(3,53),(5,53),(7,53),(3,59),(3,61),(5,61),(7,61),(3,67),(5,67),(3,71),(3,73),(5,73),(7,73),(3,79),(5,79),(3,83),(5,83),(7,83),(3,89),(5,89),(7,89),(19,79),(3,97)]

2

Mathematica 56

สิ่งนี้จะคืนค่าโซลูชันทั้งหมดสำหรับจำนวนเต็มอินพุต

Select[Tuples[Prime@Range@PrimePi[n = Input[]], 2], Tr@# == n &]

ตัวอย่างเช่นเมื่อป้อน 1298 ...

{{7, 1291}, {19, 1279}, {61, 1237}, {67, 1231}, {97, 1201}, {127, 1171}, {181, 1117}, {211, 1087}, { 229, 1069}, {277, 1021}, {307, 991}, {331, 967}, {379, 919}, {421, 877}, {439, 859}, {487, 811}, {541, 757}, {547, 751}, {571, 727}, {607, 691}, {691, 607}, {727, 571}, {751, 547}, {757, 541}, {811, 487} , {859, 439}, {877, 421}, {919, 379}, {967, 331}, {991, 307}, {1021, 277}, {1069, 229}, {1087, 211}, { 1117, 181}, {1171, 127}, {1201, 97}, {1231, 67}, {1237, 61}, {1279, 19}, {1291, 7}}

ตามที่เขียนไว้จะส่งคืนแต่ละโซลูชันสองครั้ง

Union[Sort/@ %]

{{7, 1291}, {19, 1279}, {61, 1237}, {67, 1231}, {97, 1201}, {127, 1171}, {181, 1117}, {211, 1087}, { 229, 1069}, {277, 1021}, {307, 991}, {331, 967}, {379, 919}, {421, 877}, {439, 859}, {487, 811}, {541, 757}, {547, 751}, {571, 727}, {607, 691}}


ใส่ 2, ถาม oracle ถ้ามันหยุด, พิสูจน์ / หักล้างการคาดเดาช่วงเวลาคู่ชนะ
Filipq

1

Julia 62 Chars (พร้อมท์ 85)

julia> g(n)=collect(filter((x)->sum(x)==n,combinations(primes(n),2)))
g (generic function with 1 method)

julia> g(88)
4-element Array{Array{Int64,1},1}:
 [5,83] 
 [17,71]
 [29,59]
 [41,47]

สิ่งนี้ไม่แสดงข้อความให้ผู้ใช้ (ตามต้องการ) ใช่ไหม?
res

ไม่ไม่ได้สังเกตว่า มันจะเพิ่มตัวละครมากมายตอนนี้จูเลีย g(int(readline(STDIN)))
gggg

1

GTB , 31

สำหรับเครื่องคิดเลข TI-84 ของคุณ

`A:.5A→B@%;A,4)4$~B+1,B-1#~B,B&

ไม่มีบิวด์อินพิเศษ

ตัวอย่างการวิ่ง

?4
               2
               2
?6
               3
               3
?8
               3
               5
?10
               5
               5


1

Python 3 - 150 143 ตัวอักษร

รุ่นเก่า (150 ตัวอักษร):

p=lambda n:0 in[n % i for i in range(2,n)]
n=int(input())
[print('%d+%d'%(a, b))for b in range(2,n)for a in range(2,n)if not(a+b!=n or p(a) or p(b))]

เวอร์ชันใหม่ (ขอบคุณ ProgramFOX):

p=lambda n:0 in[n%i for i in range(2,n)]
n=int(input())
[print('%d+%d'%(a,b))for b in range(2,n)for a in range(2,n)if not((a+b!=n)|p(a)|p(b))]

มันพิมพ์ทุกชุดเช่น:
4 2 + 2
10 7 + 3 5 + 5 3 + 7


|สามารถใช้กับประเภทบูลีนได้อย่างปลอดภัยดังนั้น(a+b!=n)|p(a)|p(b)
n --h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

ยิ่งสั้นลงโดยใช้: print([(a,b)for b in range(2,n)for a in range(2,n)if not((a+b!=n)|p(a)|p(b))])(พิมพ์รายการของสิ่งอันดับซึ่งผลรวมคือ n) บันทึก 8 ไบต์
ตลอดไป

การใช้r=range(2,n)และการอ้างอิงrช่วยประหยัดอีกไม่กี่
ทุก

1

q [116 ตัวอักษร]

y where all each{{2=count where 0=(x mod)each til x+1}each x}each y:{a where x=sum each a:a cross a:til x}"I"$read0 0

ไม่มีฟังก์ชั่น inbuilt เพื่อค้นหาจำนวนเฉพาะ

อินพุต

72

เอาท์พุต

5  67
11 61
13 59
19 53
29 43
31 41
41 31
43 29
53 19
59 13
61 11
67 5

1

Python - 206

สายไปงานเลี้ยงเล็ก ๆ น้อย ๆ แต่ฉันฝึกทักษะการเล่นกอล์ฟของฉัน

ฉันเขียนรหัสนี้ก่อนที่ฉันจะพบคำถามนี้! ดังนั้นของฉันจึงไม่ได้รวมแลมบ์ดาที่สวยงามซึ่งโซลูชัน Python อื่นใช้

import math
def p(n):
    if n%2==0&n>2:return False
    for i in range(3,n):
        if n%i==0:return False
    return True 
X=int(input())
for i in range(2,X):
    if p(i)&p(X-i):print i,X-i;break

1

J - 35 32 ตัวอักษร

"แจ้งผู้ใช้" เป็นความหายนะของนักกอล์ฟ J ทุกคน ไปที่ตัวละครที่หายากทั้งหมดของฉัน!

p:(n,n)#:i.&n,+/~p:i.n=:".1!:1]1

อธิบาย:

  • ".1!:1]1- อ่านในสตริง ( 1!:1) จากอินพุต (จัดการไฟล์1) และแปลงเป็นตัวเลข ( ".)
  • p:i.n=:- กำหนดหมายเลขนี้ให้กับตัวแปรnจากนั้นจึงกำหนดnช่วงเวลาแรก
  • +/~- ทำตารางเพิ่มnความกว้างและnความสูง
  • i.&n,- เปลี่ยนตารางเป็นรายการเดียวแล้วค้นหาดัชนีการเกิดครั้งแรกnซึ่งมีอยู่หากการคาดคะเนของ Goldbach เป็นจริง
  • p:(n,n)#: - ดึงแถวและคอลัมน์จากดัชนีและใช้ค่าที่สอดคล้องกัน

การใช้งาน:

   p:(n,n)#:i.&n,+/~p:i.n=:".1!:1]1
666
5 661
   p:(n,n)#:i.&n,+/~p:i.n=:".1!:1]1
1024
3 1021

หากไม่มีพรอมต์เป็นข้อกำหนดนี่คือกริยา 25 อักขระ:

(,~p:@#:]i.~&,+/~@:p:@i.)

1

เยลลี่ , 8 ไบต์ (ไม่แข่งขัน)

_ÆRfÆR.ị

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมดตรวจสอบกรณีทดสอบทั้งหมด

มันทำงานอย่างไร

_ÆRfÆR.ị  Main link. Argument: n (integer)

 ÆR       Prime range; yield all primes in [1, ..., n].
_         Subtract all primes from n.
   fÆR    Filter; intersect the list of differences with the prime range.
      .ị  At-index 0.5; yield the last and first element.

1

Julia, 50 49 bytes

~=primes;n=ARGS[]|>int
(n-~n)∩~n|>extrema|>show

ลองออนไลน์!

หากฟังก์ชั่นเป็นที่ยอมรับรหัสก็สามารถลดให้เหลือ32 ไบต์ :

~=primes
!n=(n-~n)∩~n|>extrema

มันทำงานอย่างไร

~=primesสร้างนามแฝงสำหรับฟังก์ชันprimesในตัวซึ่งส่งคืนรายการหมายเลขเฉพาะทั้งหมดจนถึงอาร์กิวเมนต์ n=ARGS[]|>intแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งแรกที่บันทึกไว้ในn n

~nที่จะหาคู่ที่เหมาะสมในช่วงแรกเราคำนวณช่วงที่สำคัญดังกล่าวข้างต้นด้วย จากนั้นn-~nอัตราผลตอบแทนทุกความแตกต่างของช่วงเวลาเหล่านี้และn

โดยตัด ( ) ผลที่ได้มีช่วงที่สำคัญตัวเองเราให้แน่ใจว่าส่วนที่เหลืออีกจำนวนเฉพาะพีเป็นเช่นที่n p -ยังเป็นนายก

สุดท้ายextremaใช้เวลานายกต่ำสุดและสูงสุดในรอบสี่แยกดังนั้นผลรวมของพวกเขาจะต้องเป็นn


0

SQL, 295 284

ใน postgresql:

create function c(c int) returns table (n int, m int) as $$ 
with recursive i(n) as
(select 2 union all select n+1 from i where n<c), 
p as (select * from i a where not exists 
(select * from i b where a.n!=b.n and mod(a.n,b.n)=0))
select * from p a, p b where a.n+b.n=c 
$$ language sql;

ควรจะสามารถทำมันในครึ่งพื้นที่แม้ว่าถ้ามันไม่ได้สำหรับสิ่งที่เหมือน "ไม่มีการเข้าร่วมด้านนอกด้านซ้ายในการเรียกซ้ำ", "ไม่มีแบบสอบถามย่อยในการเรียกซ้ำ" ...

นี่คือผลลัพธ์:

postgres=# select c(10);
   c   
-------
 (3,7)
 (5,5)
 (7,3)
(3 rows)

postgres=# select c(88);
   c    
---------
 (5,83)
 (17,71)
 (29,59)
 (41,47)
 (47,41)
 (59,29)
 (71,17)
 (83,5)
(8 rows)

0

รุ่นที่ - 266

@echo off&setLocal enableDelayedExpansion&for /L %%a in (2,1,%1)do (set/aa=%%a-1&set c=&for /L %%b in (2,1,!a!)do set/ab=%%a%%%%b&if !b!==0 set c=1
if !c! NEQ 1 set l=!l!%%a,)&for %%c in (!l!)do for %%d in (!l!)do set/ad=%%c+%%d&if !d!==%1 set o=%%c + %%d
echo !o!

กำหนดออกอย่างเรียบร้อย -

@echo off
setLocal enableDelayedExpansion
for /L %%a in (2,1,%1) do (
    set /a a=%%a-1
    set c=
    for /L %%b in (2,1,!a!) do (
        set /a b=%%a%%%%b
        if !b!==0 set c=1
    )
    if !c! NEQ 1 set l=!l!%%a,
)
for %%c in (!l!) do for %%d in (!l!) do (
    set /a d=%%c+%%d
    if !d!==%1 set o=%%c + %%d
)
echo !o!

0

Perl 5, 58 ไบต์

57, บวก 1 สำหรับ -nE

/^(11+?)(?!(11+)\2+$)1*(?=\1$)(?!(11+)\3+$)/;say for$1,$&

อินพุตและเอาต์พุตอยู่ในสภาวะเดียวกัน ตัวอย่าง:

$ perl -nE'/^(11+?)(?!(11+)\2+$)1*(?=\1$)(?!(11+)\3+$)/;say for$1,$&'
1111111111
111
1111111

หมวกปลาย


0

Oracle SQL 11.2, 202 ไบต์

WITH v(x,y,s)AS(SELECT LEVEL,LEVEL,0 FROM DUAL CONNECT BY LEVEL<=:1 UNION ALL SELECT x,y-1,s+SIGN(MOD(x,y))FROM v WHERE y>1),p AS(SELECT x FROM v WHERE x-s=2)SELECT a.x,b.x FROM p a,p b WHERE:1=a.x+b.x;   

ยกเลิกแข็งแรงเล่นกอล์ฟ

WITH v(x,y,s) AS
(
  SELECT LEVEL,LEVEL,0 FROM DUAL CONNECT BY LEVEL<=:1 
  UNION ALL 
  SELECT x,y-1,s+SIGN(MOD(x,y))FROM v WHERE y>1
)
,p AS (SELECT x FROM v WHERE x-s=2)
SELECT a.x,b.x 
FROM p a,p b 
WHERE :1=a.x+b.x;   

0

Python 3, 107 ไบต์

b=lambda x:all(x%y for y in range(2,x))
g=lambda x,i=2:((i,x-i)if b(i)&b(x-i)else g(x,i+1))if(i<x)else 0

b (x) เป็นการทดสอบเบื้องต้นสำหรับ x และ g (x) วนซ้ำเพื่อค้นหาจำนวนสองช่วงเวลาที่เหมาะสม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.