การวางนัยทั่วไปของหมายเลข Hardy – Ramanujan


12

1729 หรือที่เรียกว่าหมายเลขHardy – Ramanujanเป็นเลขจำนวนเต็มบวกที่เล็กที่สุดที่สามารถแสดงเป็นผลรวมของสองจำนวนเต็มจำนวนเต็มบวกสองวิธี ( 12^3+1^3=10^3+9^3=1729) ได้รับจำนวนเต็มn(ตามที่ป้อนในรูปแบบใดก็ตามที่เป็นธรรมชาติของภาษาที่คุณเลือก) ค้นหาจำนวนเต็มบวกที่เล็กที่สุดที่สามารถแสดงเป็นผลรวมของจำนวนเต็มบวกสองตัวที่ยกnกำลังสองในวิธีที่ไม่ซ้ำกัน ไม่มีการใช้แหล่งข้อมูลภายนอก ตัวละครที่ชนะน้อยที่สุด

โปรดทราบว่านี้เป็นจริงปัญหาที่ยังไม่แก้n>4สำหรับ สำหรับตัวเลขเหล่านั้นให้โปรแกรมของคุณทำงานตลอดไปในการค้นหาหรือลองใช้! จัดทำขึ้นเพื่อว่าถ้าได้รับเวลาและทรัพยากรที่ไม่สิ้นสุดโปรแกรมจะแก้ปัญหา


2
คุณอาจ (?) ต้องการระบุ "ผลรวมของจำนวนเต็มบวกสองตัวที่ยกnกำลังสอง" มิฉะนั้น91(ไม่1729) เป็นโซลูชั่นสำหรับตั้งแต่n=3 6^3+(−5)^3=4^3+3^3=91ฉันเรียนรู้สิ่งนี้จากลิงค์ Wikipedia ของคุณดังนั้นบางทีการอ้างอิง HM ของคุณอาจทำให้สิ่งนี้ไม่จำเป็นโดยการประชุม ไชโย!
Darren Stone

อันที่จริง1เป็นวิธีแก้ปัญหาแรก:1 = cbrt(0.5)^3 + cbrt(0.5)^3 = ...
John Dvorak

ขอบคุณสำหรับคำแนะนำและแก้ไข - ฉันหมายถึง 2 จำนวนเต็มบวก!
Ben Reich

1
@JanDvorak ฮ่า ๆ ทำให้มันR Eal!
Darren Stone

คุณพูดว่า " หาจำนวนเต็มบวกที่มีขนาดเล็กที่สุดว่า" ... ในขณะที่แม้ว่าจะมีเป็นหนึ่ง - แต่สำหรับการใด ๆn > 4 การดำรงอยู่ของตัวเลขดังกล่าวเป็นปัญหาที่ยังไม่แก้ บางทีคุณควรพูดว่า "หาจำนวนเต็มบวกที่เล็กที่สุด ( ถ้ามี ) ที่" ... เป็นไปได้ว่า "คำตอบ" เป็นลูปที่ไม่สิ้นสุดซึ่งไม่พบสิ่งใด
res

คำตอบ:


3

APL  45  41

{⍺←1⋄2≤+/,⍺=(v∘.≤v)×∘.+⍨⍵*⍨v←⍳⌊⍺*.5:⍺⋄⍵∇⍨⍺+1}

รุ่นที่สั้นกว่า แต่มี 41 ตัวอักษรที่ช้ากว่า:

{⍺←1⋄2≤+/,⍺=(v∘.≤v)×∘.+⍨⍵*⍨v←⍳⍺:⍺⋄⍵∇⍨⍺+1}

คุณสามารถลองออนไลน์ได้เพียงวางฟังก์ชั่นแล้วเรียกใช้ด้วยหมายเลข:

      {⍺←1⋄2≤+/,⍺=(v∘.≤v)×∘.+⍨⍵*⍨v←⍳⌊⍺*.5:⍺⋄⍵∇⍨⍺+1} 2
50
      {⍺←1⋄2≤+/,⍺=(v∘.≤v)×∘.+⍨⍵*⍨v←⍳⌊⍺*.5:⍺⋄⍵∇⍨⍺+1} 3
1729

(อัลกอริทึมค่อนข้างโง่ แต่อย่าคาดหวังว่าล่ามออนไลน์จะคำนวณ n = 4)

คำตอบสำหรับ n = 2 คือ 50 = 5² + 5² = 7² + 1²เพราะเป็นตัวเลขที่ "สามารถแสดงเป็นผลรวมของจำนวนเต็มบวกสองกำลังสอง - ไม่พูดแตกต่างกัน - ในสองวิธี"

หากคุณต้องการเพิ่มส่วนคำสั่งที่แตกต่างเพียงแค่เปลี่ยน(v∘.≤v)เป็น(v∘.<v)จำนวนตัวอักษรเดียวกันและ n = 2 กลายเป็น 65:

      {⍺←1⋄2≤+/,⍺=(v∘.<v)×∘.+⍨⍵*⍨v←⍳⌊⍺*.5:⍺⋄⍵∇⍨⍺+1} 2
65

ฉันกำลังตี GolfScript หรือไม่ ไม่สามารถ !!


ดี! และฉันหมายถึงจำนวนเต็มที่แตกต่างกัน แต่ฉันไม่ได้ระบุพลังที่มากขึ้นสำหรับยา! กลับไปกระดานวาดภาพสำหรับ GolfScript ...
เบนรีค

2

ทับทิม, 132

n=$*[r=0].to_i;while r+=1
r.times{|a|r.times{|b|next if
a**n+b**n!=r;r.times{|c|r.times{|d|puts(r)if
c**n+d**n==r&&a!=c&&a!=d}}}}end

ส่งผ่านnอาร์กิวเมนต์บรรทัดคำสั่ง บรรทัดแรกstdoutคือการแก้ปัญหา

ปรับให้เหมาะสมสำหรับการเขียนโค้ดกอล์ฟไม่ใช่ประสิทธิภาพ (ทำงานอย่างถูกต้อง แต่ช้าทำงานได้มากกว่าที่ต้องการ)


นี่คือโปรแกรม C ที่ยาวกว่าและเร็วกว่าเล็กน้อย อัลกอริทึมที่ถูกต้อง แต่น่ากลัวเหมือนกัน (ฉันจำเป็นต้องศึกษาทฤษฎีมากขึ้น!)

ทดสอบแล้วสำหรับn= 2, n= 3

C, 234

#include<stdio.h>#include<math.h>
r,a,b,c,d;main(n){scanf("%d",&n);while(++r){for(a=0;a<r;++a){for(b=a;b<r;++b){if(pow(a,n)+pow(b,n)!=r)continue;for(c=a+1;c<r;++c){for(d=0;d<r;++d){if(pow(c,n)+pow(d,n)==r&&a!=d)printf("%d\n",r);}}}}}}

รุ่น C ใช้เวลาในการn stdinดังกล่าวข้างต้นบรรทัดแรกstdoutคือการแก้ปัญหา


1

GolfScript 53

1\.{;\).,{}@.@\{?}+%.`{\{+}+%~}+%$.`{\{=}+,,4=}+,.!}do)

อินพุตคือหมายเลขเริ่มต้นบนสแต็ก หมายเลขที่อยู่ด้านบนสุดของสแต็กท้ายคำตอบคือ ฉันจะอธิบายรายละเอียดเพิ่มเติมเมื่อฉันมีโอกาส

เช่น

{1\.{;\).,@.@\{?}+%.`{\{+}+%~}+%$.`{\{=}+,,4=}+,.!}do)}:f
2 f -> 25 
3 f -> 1729

ตอนนี้ค่อนข้างช้าแล้ว นอกจากนี้ยังมีการนับ0(ดังนั้น 25 จึงเป็นคำตอบสำหรับn=2เนื่องจาก25=5^2+0^2=3^2+4^2ในการที่จะไม่นับ 0 ให้เพิ่มอักขระ 2 ตัว(;หลังแรก,

1\.{;\).,(;{}@.@\{?}+%.`{\{+}+%~}+%$.`{\{=}+,,4=}+,.!}do)

เพื่อค้นหาว่า2 f=65ตั้งแต่65=8^2+1^2=5^2+6^2


1

GolfScript (30 ตัวอักษร)

:N{).,{)N?}%:P{1$\-P?)},,3<}do

หมายเหตุ: สิ่งนี้ค่อนข้างช้าเพราะเป็นการค้นหาที่ดุร้ายมากกว่าสิ่งที่สวยงามเหมือนคิวลำดับความสำคัญ สิ่งที่หรูหราที่สุดเกี่ยวกับเรื่องนี้ถูกนำมาใช้ใหม่Nเป็นขอบเขตล่างที่จะค้นหา: นี่คือถูกต้องเพราะทั้งหมด1^N + 2^N > NN

ใช้เวลาNในสแต็กปล่อยให้หมายเลขรถแท็กซี่ที่สอดคล้องกันบนสแต็ก ที่จะใช้Nจาก stdin, ~เสริม

อนุญาตให้ใช้เวอร์ชันด้านบนx^N + x^N(เพื่อN=2ให้ได้50) ที่จะต้องเพิ่มตัวเลขที่แตกต่างกัน (ให้65แทน) เปลี่ยนไป3 4ในการอนุญาตให้0^N + x^N(ให้25) ลบทันทีก่อน)N?


0

Mathematica, 58 ตัวอักษร

ทางออกที่ช้ามาก ๆ โดยใช้ฟังก์ชั่นสร้าง:

0//.i_/;(D[Sum[x^(n^#),{n,1,i}]^2,{x,i}]/.x->0)/i!<4:>i+1&
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.