ライリーの定理


13

S.ライリーは1825年に定理に従って証明しました。

すべての有理数は、3つの有理立方体の合計として表すことができます。

チャレンジ

いくつかの有理数を考えるとrQ 3つの有理数見つけB C Qは、そのようなことを、R = A 3 + B 3 + C 3a,b,cQ

r=a3+b3+c3.

詳細

提出は、十分な時間とメモリが与えられたすべての入力に対してソリューションを計算できる必要があります。つまり、たとえば、2つの32ビットintが分数を表すだけでは不十分です。

30=3982933876681363660054951533977505554546352=607029013173+2396129245436192271286533071728=(12)3+(13)3+(14)30=03+03+031=(12)3+(23)3+(56)342=(1810423509232)3+(1495210609)3+(25454944)3


1
私は、Japtでこの種の機能を実行しましたが、「再帰が多すぎる」エラーに遭遇することがよくありました。おそらく、戦略は「乱数を取得し、正解になるまでもう一度試してください」だったからでしょう。
カミルドラカリ

1
bignumサポートを必要とすると、多くの言語が不必要に除外され、および/またはそれらを実装するために多くの無駄なボイラープレートが必要になります
Sparr

2
@Sparrこれは意図的な選択でした。出力は単純な入力でもかなり「大きく」なる可能性があります。また、使用する方法によっては、計算の中間値も非常に大きくなる可能性があります。したがって、任意の精度の数値を扱うことは、この課題の重要なポイントでした(おそらく、他の数値理論の課題でも非常に頻繁に起こります)。
flawr

1
それは出力に許容されるであろう[p1,p2,p3,q]、と解釈(p1q)3+(p2q)3+(p3q)3
アーナウルド

同様の流れに沿って、出力される3つの有理数は最も単純な形式である必要がありますか?
Quintec

回答:


10

パリ/ GP、40バイト

r->[x=27*r^3+1,9*r-x,z=9*r-27*r^2]/(3-z)

オンラインでお試しください!


同じ長さ、同じ式:

r->d=9*r^2-3*r+1;[x=r+1/3,3*r/d-x,1/d-1]

オンラインでお試しください!


この式は、 Richmond、H.(1930)で提供されています。x3+y3+z3=R Rationalソリューションについて。Edinburgh Mathematical Societyの議事録、2(2)、92-100。

r=(27r3+127r29r+3)3+(27r3+9r127r29r+3)3+(27r2+9r27r29r+3)3

オンラインで確認してください!


1
-5バイト、被加害者の順序を変更できるため
Black Owl Kai

1
第被加数の@BlackOwlKai分子は、、ではない- 27 R 2 + 927r3+9r127r2+9r1

8

Haskell95 89 76 69 68バイト

f x=[w|n<-[1..],w<-mapM(\_->[-n,1/n-n..n])"IOU",x==sum((^3)<$>w)]!!0

オンラインでお試しください!

シンプルなブルートフォースソリューション。フォームの有理数のすべてのトリプルをテストします

(a1n,a2n,a3n)with nainn.

  • 3つの有理数は同じ分母を持つと常に仮定できます。
    (a1n1,a2n2,a3n3)=(a1n2n3n1n2n3,a2n1n3n1n2n3,a3n1n2n1n2n3).
  • nainn
    ain=aiNnN
    N

「IOU」は何をしますか?
ソロモンウッコ

@SolomonUcko特別なことはありません。長さ3の他のリストと同じくらい良い
です-Delfad0r

@ H.PWiz入力された入力が受け入れられると仮定するかどうかについてMetaでコンセンサスを見つけることができませんでしたが、その仮定なしでコードを短縮する方法を見つけました。ありがとう!
Delfad0r

4
@ Delfad0r 可能なインポートをカウントする必要がない「コンセンサス」があります。これは、関数を定義するためにインポートから明示的に何も必要としない場合に、必要なタイプを構築するためにのみ必要です。(そして、呼び出されたときに正しい型が関数に渡されると仮定できます。)
flawr

1
以下を使用して1バイト節約します[-n,1/n-n..n]
Christian Sievers

6

、14バイト

ḟo=⁰ṁ^3π3×/NİZ

シンプルなブルートフォースソリューション。 オンラインでお試しください!

説明

ハスクの除算はデフォルトで有理数を使用し、デカルト積は無限リストに対して正しく機能するため、非常に簡単なプログラムになります。

ḟo=⁰ṁ^3π3×/NİZ
            İZ  Integers: [0,1,-1,2,-2,3,-3...
           N    Natural numbers: [1,2,3,4,5...
         ×/     Mix by division: [0,1,0,-1,1/2,0,2,-1/2,1/3...
                This list contains n/m for every integer n and natural m.
       π3       All triples: [[0,0,0],[0,0,1],[1,0,0]...
ḟ               Find the first one
    ṁ^3         whose sum of cubes
 o=⁰            equals the input.

2

JavaScript(Node.js)、73バイト

入力をとして取ります(p)(q)。ここで、p そして q BigIntリテラルです。

[[p1,q1],[p2,q2],[p3,q3]]そのようなものを返しますpq=p1q13+p2q23+p3q33

p=>q=>[x=p*(y=p*(p*=9n*q*q)*3n/q)/q+(q*=q*q),p-x,p-=y].map(x=>[x,3n*q-p])

オンラインでお試しください!

由来するXの合理的なソリューションに、HWリッチモンド(1930)3 + Y 3 + Z 3 = R


2

ハスケル、70バイト

数字の理論入門(ハーディとライトによる)も合理的パラメータを含むことが建設があります。ゴルフの目的のために、このパラメーターを1に設定し、可能な限り削減しました。これは式になります

r[r3648r2+77760r+37324872r+72212r72rr+722r2720r+518472r+72]

f r|t<-r/72,c<-t+1,v<-24*t/c^3,a<-(v*t-1)*c=((a+v*c+c)/2-)<$>[a,v*c,c]

オンラインでお試しください!


1

perl -Mbigrat -nE、85バイト

$_=eval;($a,$b)=($_*9,$_**2*27);$c=$b*$_;say for map$_/($b-$a+3),$c+1,-$c+$a-1,-$b+$a

$_=eval;入力が整数であることがわかっている場合は、8バイト(先頭)を保存できます。この部分は、プログラムにフォームの入力を入力させるために必要です308/1728。入力はSTDINから読み取られます。@alephalphaで指定された式を使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.