Ostatnie twierdzenie Fermata mówi, że nie ma pozytywnych, integralnych rozwiązań równania a^n + b^n = c^n
dla żadnegon>2
. To udowodnił Andrew Wiles w 1994 roku.
Istnieje jednak wiele „bliskich nieudanych prób”, które prawie spełniają równanie diofantyczne, ale pomijają je o jedno. Dokładnie, wszystkie są większe niż 1 i są integralnymi rozwiązaniami a^3 + b^3 = c^3 + 1
(sekwencja jest wartością każdej strony równania, w porządku rosnącym).
Zadanie polega n
na wydrukowaniu pierwszych n
wartości z tej sekwencji.
Oto kilka pierwszych wartości sekwencji:
1729, 1092728, 3375001, 15438250, 121287376, 401947273, 3680797185, 6352182209, 7856862273, 12422690497, 73244501505, 145697644729, 179406144001, 648787169394, 938601300672, 985966166178, 1594232306569, 2898516861513, 9635042700640, 10119744747001, 31599452533376, 49108313528001, 50194406979073, 57507986235800, 58515008947768, 65753372717929, 71395901759126, 107741456072705, 194890060205353, 206173690790977, 251072400480057, 404682117722064, 498168062719418, 586607471154432, 588522607645609, 639746322022297, 729729243027001
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach !
Odpowiedzi:
Galaretka , 16 bajtów
Rozwiązanie siłowe. Wypróbuj online!
źródło
Brachylog , 31 bajtów
Wypróbuj online!
To nie jest pełna brutalna siła, ponieważ wykorzystuje ograniczenia. Jest to trochę wolne w przypadku TIO (około 20 sekund
N = 5
). Na mojej maszynie trwa około 5 sekundN = 5
i 13 sekundN = 6
.Wyjaśnienie
źródło
Perl, 78 bajtów
Podejście brutalnej siły. Couting shebang jako dwa, dane wejściowe są pobierane ze standardowego wejścia.
Przykładowe użycie
Wypróbuj online!
źródło
Mathematica, 95 bytes
Unnamed function taking a single positive integer argument
#
and returning a list of the desired#
integers. Spaced for human readability:Line 4 calculates all possible sums of cubes of integers between 2 and
b
+1 (with the initializationb=9
in line 1) in sorted order. Lines 3-5 select from those sums only those that are also one more than a perfect cube; line 6 limits that list to at most#
values, which are stored ina
. But if this list has in fact fewer than#
values, theWhile
loop in lines 1-7 incrementsb
and tries again. Finally, line 8 outputsa
once it's the right length.Holy hell this version is slow! For one extra byte, we can change
b++
in line 7 tob*=9
and make the code actually run in reasonable time (indeed, that's how I tested it).źródło
Racket 166 bytes
Ungolfed:
Testing:
Output:
źródło
Python 2,
10298 bytesTry it online!
źródło
Pari/GP, 107 bytes
Finds the first 10 solutions in 10 sec.
Goal: a^3+b^3 = c^3+1
Gets number of required solutions by function-argument n
Increases c from 3 and for each c^3+1 searches a and b with 1 < a <= b < c such that a^3+b^3=c^3+1 . If found, decrease required number of further soulutions n by 1 and repeat
Finishes, when number of furtherly required solutions (in n) equals 0
Call it to get the first ten solutions:
Readable code (requires leading and trailing braces as indicators for block-notation of the function. Also for convenience prints all variables of a solution):
Pari/GP, 93 bytes
(Improvement by Dennis)
źródło
Python 2,
122119 Byteswhy are you still upvoting? Dennis crushed this answer ;)
Welcome to the longest solution to this question :/ I managed to shave off a whole byte by making longer conditions and removing as much indentation as possible.
Output for
n = 5
:źródło
TI-Basic, 90 bytes
There must be a shorter way...
źródło
MATLAB, 94 bytes
Another brute-force solution:
Output for
n=4
:Suppressing the
c=
part of the display increases the code to 100 bytesźródło
C#,
188174187136 bytesGolfed version thanks to TheLethalCoder for his great code golfing and tips (Try online!):
Execution time to find the first 10 numbers: 33,370842 seconds on my i7 laptop (original version below was 9,618127 seconds for the same task).
Ungolfed version:
Previous golfed 187 bytes version including
using System;
Previous golfed 174 bytes version (thanks to Peter Taylor):
Previous (original) golfed 188 bytes version (Try online!):
Execution time to find the first 10 numbers: 9,618127 seconds on my i7 laptop.
This is my first ever attempt in C# coding... A bit verbose compared to other languages...
źródło
for
loop. 2.int.Parse
is shorter thanConvert.ToInt32
. 3.long
is shorter thandouble
and more accurate for this task. 4.t
is unnecessary: you can countn
down to0
instead. 5. Technically I think you need to break two loops after printing, in case there's a triple coincidence.static void Main(){for(long a,b,c=3,n=int.Parse(Console.ReadLine());n>0;c++)for(a=2;a<c;a++)for(b=a;b<c;b++)if(a*a*a+b*b*b==c*c*c+1)Console.WriteLine(c*c*(a=c)+n/n--);}
Action
which will save the bytes used in the method signature i.e.()=>{/*code here*/};
using System;
into the byte countGameMaker Language, 119 bytes
Why is
show_message()
so long :(x,y,z=2,3,4 n=input() while n: if y3+x3-z3==1and x3+1;n-=1 x+=1 if y
źródło
Axiom, 246 bytes
ungof and result
źródło