Hardy-Ramanujan sayı genellemesi


12

Hardy-Ramanujan sayısı olarak bilinen 1729, iki pozitif artı tamsayı küpünün toplamı olarak iki şekilde ifade edilebilen en küçük pozitif tamsayıdır ( 12^3+1^3=10^3+9^3=1729). Bir tamsayı n(tercih ettiğiniz dilde doğal olan herhangi bir biçimde girdi olarak) n, iki farklı şekilde th gücüne yükseltilen iki pozitif tamsayının toplamı olarak ifade edilebilen en küçük pozitif tamsayıyı bulun . Harici kaynak kullanımı yok. En az karakter kazanır.

Bunun aslında çözülmemiş bir sorun olduğunu unutmayın n>4. Bu sayılar için, programınızın aramada sonsuza kadar çalışmasına izin verin veya denerken ölün! Sonsuz zaman ve kaynak verilirse programın sorunu çözmesini sağlayın.


2
" Th gücüne yükseltilmiş iki pozitif tam sayının toplamını" belirtmek isteyebilirsiniz n. Aksi takdirde, 91(değil 1729) için bir çözüm n=3, çünkü 6^3+(−5)^3=4^3+3^3=91. Bunu Wikipedia bağlantınızdan öğrendim, bu yüzden HM referansınız bunu geleneksel olarak gereksiz kılar. Şerefe!
Darren Stone

aslında, 1ilk çözüm:1 = cbrt(0.5)^3 + cbrt(0.5)^3 = ...
John Dvorak

Öneriler ve düzenleme için teşekkürler - 2 pozitif tamsayı demek istedim!
Ben Reich

1
@ JanDvorak, ha, evet. Tutulması o R eal!
Darren Stone

Sen "demek bulmak ..., sanki oradaki küçük pozitif tamsayı" olduğunu tek - ama herhangi biri için n > 4 tür sayıların varlığı olan çözülmemiş bir sorun . Belki "en küçük pozitif tamsayıyı bul ( eğer varsa ) " demelisiniz " ..." Cevapların "hiçbir şey bulamayan bitmeyen döngüler olması mümkündür.
res

Yanıtlar:


3

APL  45  41

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

41 karakterlik daha kısa ama daha yavaş sürüm:

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

Çevrimiçi olarak deneyebilirsiniz , işlevi yapıştırın ve bir sayı ile çağırın:

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

(Algoritma oldukça aptal, çevrimiçi yorumlayıcının n = 4 hesaplamasını beklemeyin)

N = 2 için cevap 50 = 5² + 5² = 7² + 1²'dir, çünkü bu sayı "pozitif tamsayıların iki karesinin toplamı olarak ifade edilebilir - farklı söylemez - iki şekilde".

Eğer farklı maddesini, sadece değişimi eklemek istiyorsanız (v∘.≤v)içine (v∘.<v), karakter aynı sayıda ve n = 2 65 olur:

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

GolfScript'i mi yeniyorum? Olamaz !!


Güzel! Ve farklı tamsayılar demek istedim, ama belirtmedim, sana daha fazla güç! GolfScript için çizim tahtasına geri dön ...
Ben Reich

2

Ruby, 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

Geçiş nkomut satırı argümanı olarak. İlk satır stdoutçözümdür.

Performans için değil, kod golf için optimize edilmiştir. (Doğru çalışıyor. Ancak yavaş. Gerekenden daha fazla iş yapıyor.)


İşte daha uzun, biraz daha hızlı bir C programı. Aynı doğru ama korkunç algoritma. (Gerçekten daha fazla teori çalışmam gerekiyor!)

n= 2, n= 3 için test edildi .

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 versiyonu alır nüzerinde stdin. Yukarıdaki gibi, ilk satır stdoutçözümdür.


1

GolfScript 53

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

Giriş, yığındaki ilk sayıdır. Sonunda yığının üstündeki sayı cevaptır. Bir şansım olduğunda bunu daha ayrıntılı olarak açıklayacağım.

Örneğin

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

Bu şu anda oldukça yavaş. Ayrıca sayımları 0(şimdiye 25 için cevap olduğunu n=2çünkü 25=5^2+0^2=3^2+4^2. 2 karakter eklemek, 0 sayılmaz için de sipariş (;ilk sonra,

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

Bunu bulmak için 2 f=65,65=8^2+1^2=5^2+6^2


1

GolfScript (30 karakter)

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

Not: Bu oldukça yavaştır, çünkü öncelik sırası gibi zarif bir şey yerine kaba kuvvetli bir arama yapar. Bununla ilgili en zarif şey, aranacak Nbir alt sınır olarak yeniden kullanmaktır : bu 1^N + 2^N > Nherkes için geçerlidir N.

Alır Nyığında, yığında gelen taksi numarasını bırakır. NStdin'den almak için ~.

Yukarıdaki sürüm izin verir x^N + x^N(böylece N=2verir 50). (Vererek farklı sayılar ekleyerek zorunlu kılmak için 65yerine), değiştirmek 3için 4. İzin vermek 0^N + x^N(vermek 25) için )hemen önce kaldırın N?.


0

Mathematica, 58 karakter

Üretim fonksiyonunu kullanan çok yavaş bir çözüm:

0//.i_/;(D[Sum[x^(n^#),{n,1,i}]^2,{x,i}]/.x->0)/i!<4:>i+1&
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.