मिसेस के पास फरमेंट


31

फ़र्मेट के अंतिम प्रमेय का कहना है कि a^n + b^n = c^nकिसी भी समीकरण के लिए कोई सकारात्मक, अभिन्न समाधान नहीं हैं n>2। यह 1994 में एंड्रयू विल्स द्वारा सही साबित हुआ था।

हालांकि, ऐसे कई "मिसेस के पास" हैं जो डायोफैंटाइन समीकरण को लगभग संतुष्ट करते हैं लेकिन इसे एक-एक करके याद करते हैं। संक्षेप में, वे सभी 1 से अधिक हैं और a^3 + b^3 = c^3 + 1(क्रम में समीकरण के प्रत्येक पक्ष का मान है, बढ़ते क्रम में) के अभिन्न समाधान हैं ।

आपका कार्य दिया गया है n, nइस क्रम के पहले मूल्यों का पता लगाने के लिए ।

अनुक्रम के पहले कुछ मूल्य इस प्रकार हैं:

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

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है !



1
पहला रामानुजन का en.wikipedia.org/wiki/Taxicab_number है । सी की अनुक्रम, oeis.org/A050791 सहायक हो सकती है।
जॉली जोकर

जवाबों:


14

जेली , 16 बाइट्स

*3‘
ḊŒc*3S€ċǵ#Ç

जानवर बल समाधान। इसे ऑनलाइन आज़माएं!

*3‘           Helper link. Maps r to r³+1.

ḊŒc*3S€ċǵ#Ç  Main link. No arguments.

         µ    Combine the links to the left into a chain.
          #   Read an integer n from STDIN and execute the chain to the left for
              k = 0, 1, 2, ... until n matches were found. Yield the matches.
Ḋ             Dequeue; yield [2, ..., k].
 Œc           Yield all 2-combinations of elements of that range.
   *3         Elevate the integers in each pair to the third power.
     S€       Compute the sum of each pair.
        Ç     Call the helper link, yielding k³+1.
       ċ      Count how many times k³+1 appears in the sums. This yields a truthy 
              (i.e., non-zero) integer if and only if k is a match.
           Ç  Map the helper link over the array of matches.

8

ब्रेकीलॉग , 31 बाइट्स

:{#T#>>:{:3^}aLhH,Lb+.-H,#T=,}y

इसे ऑनलाइन आज़माएं!

यह पूरी तरह से बल नहीं है क्योंकि यह बाधाओं का उपयोग करता है। यह TIO पर थोड़ा धीमा है (लगभग 20 सेकंड के लिए N = 5)। के बारे में 5 सेकंड N = 5और N = 6मेरी मशीन पर 13 सेकंड के लिए ले जाता है ।

व्याख्या

:{                           }y    Return the first Input outputs of that predicate
  #T                               #T is a built-in list of 3 variables
    #>                             #T must contain strictly positive values
      >                            #T must be a strictly decreasing list of integers
       :{:3^}aL                    L is the list of cubes of the integers in #T
              LhH,                 H is the first element of L (the biggest)
                  Lb+.             Output is the sum of the last two elements of L
                     .-H,          Output - 1 = H
                         #T=,      Find values for #T that satisfy those constaints

8

पर्ल, 78 बाइट्स

#!perl -nl
grep$_<(($_+2)**(1/3)|0)**3,map$i**3-$_**3,2..$i++and$_-=print$i**3+1while$_

जानवर बल दृष्टिकोण। शेबंग को दो के रूप में बताते हुए, स्टड से इनपुट लिया जाता है।

नमूना उपयोग

$ echo 10 | perl fermat-near-miss.pl
1729
1092728
3375001
15438250
121287376
401947273
3680797185
6352182209
7856862273
12422690497

इसे ऑनलाइन आज़माएं!


7

गणितज्ञ, 95 बाइट्स

(b=9;While[Length[a=Select[Union@@Array[#^3+#2^3&,{b,b},2],IntegerQ[(#-1)^3^-1]&,#]]<#,b++];a)&

एक ही सकारात्मक पूर्णांक तर्क ले रहा है #और वांछित #पूर्णांकों की सूची लौटा रहा है । मानव पठनीयता के लिए स्थान:

1  (b = 9; While[
2    Length[ a =
3      Select[
4        Union @@ Array[#^3 + #2^3 &, {b, b}, 2],
5        IntegerQ[(# - 1)^3^-1] &
6      , #]
7    ] < #, b++
8  ]; a) &

पंक्ति 4 क्रमबद्ध क्रम में 2 और b+1 के बीच पूर्णांक के क्यूब्स के सभी संभावित योगों की गणना करता है ( b=9पंक्ति 1 में आरंभीकरण के साथ )। लाइनें 3-5 उन रकमों से चुनती हैं जो केवल एक पूर्ण घन से एक अधिक होती हैं; पंक्ति 6 ​​उस सूची को सबसे अधिक #मानों तक सीमित करती है , जो इसमें संग्रहीत हैं a। लेकिन अगर यह सूची वास्तव में #मूल्यों से कम है , तोWhile लूप 1-7 वेतन वृद्धि में है bऔर फिर से कोशिश करता है। अंत में, लाइन 8 आउटपुट aसही लंबाई होने के बाद।

पवित्र नरक यह संस्करण धीमा है! एक अतिरिक्त बाइट के लिए, हम b++लाइन 7 में बदल सकते हैं b*=9और कोड को वास्तव में उचित समय में चला सकते हैं (वास्तव में, यह है कि मैंने इसे कैसे परीक्षण किया है)।


6

रैकेट 166 बाइट्स

(let((c 0)(g(λ(x)(* x x x))))(for*((i(in-naturals))(j(range 1 i))(k(range j i))#:final(= c n))
(when(=(+(g j)(g k))(+ 1(g i)))(displayln(+ 1(g i)))(set! c(+ 1 c)))))

Ungolfed:

(define (f n)
  (let ((c 0)
        (g (λ (x) (* x x x))))
    (for* ((i (in-naturals))
           (j (range 1 i))
           (k (range j i))
           #:final (= c n))
      (when (= (+ (g j) (g k))
               (+ 1 (g i)))
        (displayln (+ 1(g i)))
        (set! c (add1 c))))))

परिक्षण:

(f 5)

आउटपुट:

1729
1092728
3375001
15438250
121287376


5

परी / जीपी, 107 बाइट्स

F(n)=c=2;while(n>0,c++;C=c^3+1;a=2;b=c-1;while(a<b,K=a^3+b^3;if(K==C,print(C);n--;break);if(K>C, b--,a++)))

10 सेकंड में पहले 10 समाधान ढूँढता है।

लक्ष्य: एक ^ 3 + b ^ 3 = c ^ 3 + 1

  1. फ़ंक्शन-तर्क n द्वारा आवश्यक समाधानों की संख्या हो जाती है

  2. बढ़ जाती है से 3 और प्रत्येक के लिए ग ^ 3 + 1 खोजें एक और के साथ 1 <एक <= ख <ग ऐसी है कि एक ^ 3 + b ^ 3 = c ^ 3 + 1 । तो मिल गया है, आगे soulutions की अपेक्षित संख्या में कमी n द्वारा 1 और दोहराने

  3. खत्म हो जाता है, जब आवश्यक समाधान की संख्या ( एन में ) 0 के बराबर होती है

पहले दस समाधान प्राप्त करने के लिए इसे कॉल करें :

F(10)

पठनीय कोड (फ़ंक्शन के ब्लॉक-नोटेशन के लिए संकेतक के रूप में अग्रणी और अनुगामी ब्रेसिज़ की आवश्यकता है। सुविधा समाधान के सभी चर प्रिंट के लिए भी):

{F(m) = c=2;
   while(m>0,        
     c++;C=c^3+1;             
     a=2;b=c-1;                
     while(a<b,                
           K=a^3+b^3;               
            if(K==C,print([a,b,c,C]);m--;break);
            if(K>C, b--,a++);
          );
    );}

परी / जीपी, 93 बाइट्स

(डेनिस द्वारा सुधार)

F(n)=c=2;while(n,C=c^3+1;a=2;b=c++;while(a<b,if(K=a^3+b^3-C,b-=K>0;a+=K<0,print(C);n--;b=a)))              

PPCG में आपका स्वागत है! मैंने आपको सामान्य प्रारूप का जवाब देने की स्वतंत्रता दी (कुछ उपयोगकर्ता और स्टैक स्निपेट उस पर भरोसा करते हैं)। यह कुछ बाइट्स को बचाने के लिए लगता है।
डेनिस

हाह, डेनिस, स्वरूपण के लिए धन्यवाद। और कमी वास्तव में शांत है! मैंने कभी उस विशिष्ट मोड़ को नहीं देखा है ... मैं इसे संस्करण के रूप में उत्तर में ले जाऊंगा।
गॉटफ्रीड हेल्स

5

अजगर 2, 122 119 बाइट्स

तुम अभी भी क्यों उठ रहे हो? डेनिस ने इस जवाब को कुचल दिया;)

इस सवाल के सबसे लंबे समाधान में आपका स्वागत है: / मैं लंबी स्थितियों को बनाकर और संभव के रूप में अधिक इंडेंटेशन को हटाकर एक पूरी बाइट को बंद करने में कामयाब रहा।

x,y,z=2,3,4
n=input()
while n:
 if y**3+x**3-z**3==1and x<y<z:print z**3+1;n-=1
 x+=1
 if y<x:y+=1;x=2
 if z<y:z+=1;y=3

इसके लिए आउटपुट n = 5:

1729
1092728
3375001
15438250
121287376

4

टीआई-बेसिक, 90 बाइट्स

एक छोटा रास्ता होना चाहिए ...

Prompt N
2->X
3->Y
4->Z
While N
If 1=X³+Y³-Z³ and X<Y and Y<Z
Then
DS<(N,0
X+1->X
If Y<X
Then
2->X
Y+1->Y
End
If Z<Y
Then
3->Y
Z+1->Z
End
End

2

MATLAB, 94 बाइट्स

एक और जानवर बल समाधान:

for z=4:inf,for y=3:z,for x=2:y,c=z^3+1;if x^3+y^3==c,n=n-1;c,if~n,return,end,end,end,end,end

इसके लिए आउटपुट n=4:

>> n=4; fermat_near_misses    
c =
        1729
c =
     1092728
c =
     3375001
c =
    15438250

c=डिस्प्ले के हिस्से को दबाने से कोड 100 बाइट तक बढ़ जाता है

for z=4:inf,for y=3:z,for x=2:y,c=z^3+1;if x^3+y^3==c,n=n-1;disp(c),if~n,return,end,end,end,end,end

>> n=4; fermat_near_misses_cleandisp    
        1729
     1092728
     3375001
    15438250

5 "अंत" क्यों हैं? क्षमा करें, मैं matlab में भयानक हूँ
ev3commander

@ ev3commander यह MATLAB का स्टेटमेंट क्लोजिंग सिंबल है, "क्लोजिंग कोष्ठक" अगर आप करेंगे
Rody Oldenhuis

2

सी #, 188 174 187 136 बाइट्स

अपने महान कोड गोल्फ और सुझावों के लिए TheLethalCoder के लिए गोल्फ संस्करण धन्यवाद ( ऑनलाइन प्रयास करें! )।

n=>{for(long a,b,c=3;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)System‌​.Console.WriteLin‌e(‌​c*c*(a=c)+n/n--);};

पहले 10 नंबर खोजने के लिए निष्पादन समय: मेरे i7 लैपटॉप पर 33,370842 सेकंड (मूल संस्करण नीचे एक ही कार्य के लिए 9,618127 सेकंड) था।

Ungolfed संस्करण:

using System;

public class Program
{
    public static void Main()
    {
        Action<int> action = n =>
        {
            for (long a, b, d, c = 3; 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)
                            System‌.Console.WriteLin‌e( c * c * (a = c) + n / n--);
        };

        //Called like
        action(5);
    }
}

पिछला गोल्फ सहित 187 बाइट्स संस्करण using System;

using System;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.WriteLin‌​e(c*c*(a=c)+n/n--);}

पिछला गोल्फ 174 बाइट्स संस्करण (पीटर टेलर के लिए धन्यवाद):

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.WriteLin‌​e(c*c*(a=c)+n/n--);}

पिछला (मूल) गोल्फ 188 बाइट्स संस्करण ( ऑनलाइन प्रयास करें! ):

static void Main(){double a,b,c,d;int t=0,n=Convert.ToInt32(Console.ReadLine());for(c=3;t<n;c++)for(a=2;a<c;a++)for(b=a;b<c;b++){d=(c*c*c)+1;if(a*a*a+b*b*b==d){Console.WriteLine(d);t++;}}}

मेरे i7 लैपटॉप पर पहले 10 नंबर: 9,618127 सेकंड खोजने के लिए निष्पादन समय।

C # कोडिंग में यह मेरा पहला प्रयास है ... अन्य भाषाओं की तुलना में थोड़ी क्रिया ...


3
1. आप forलूप के पहले क्लॉज में वैरिएबल घोषित कर सकते हैं । 2. int.Parseसे छोटा है Convert.ToInt32। 3. longतुलना में कम है doubleऔर इस कार्य के लिए और अधिक सटीक। 4. tअनावश्यक है: आप इसके बजाय nनीचे गिन सकते हैं 0। 5. तकनीकी रूप से मुझे लगता है कि मुद्रण के बाद आपको दो छोरों को तोड़ने की जरूरत है, अगर इसमें कोई संयोग है।
पीटर टेलर

2
अनटाइटेड: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जो विधि हस्ताक्षर में प्रयुक्त बाइट्स को बचाएगा()=>{/*code here*/};
TheLethalCoder

आपको नामों को पूरी तरह से अर्हता प्राप्त करने या using System;बाइट की संख्या में जोड़ने की आवश्यकता होगी
TheLethalCoder

@PeterTaylor महान सुझावों के लिए धन्यवाद! मैं
मारियो

0

गेममेकर भाषा, 119 बाइट्स

show_message()इतना लंबा क्यों है :(

x=2y=3z=4w=argument0 while n>0{if x*x*x+y*y*y-z*z*z=1&x<y&y<z{show_message(z*z*z+1)n--}x++if y<x{x=2y++}if z<y{y=3z++}}

x, y, z = 2,3,4 n = इनपुट () n: जबकि y 3 + x 3-z3 == 1and x3 + 1; n- = 1 x + = 1 यदि y


0

Axiom, 246 बाइट्स

h(x:PI):List INT==(r:List INT:=[];i:=0;a:=1;repeat(a:=a+1;b:=1;t:=a^3;repeat(b:=b+1;b>=a=>break;q:=t+b^3;l:=gcd(q-1,223092870);l~=1 and(q-1)rem(l^3)~=0=>0;c:=round((q-1)^(1./3))::INT;if c^3=q-1 then(r:=cons(q,r);i:=i+1;i>=x=>return reverse(r)))))

परिणाम और परिणाम

-- hh returns x in 1.. numbers in a INT list [y_1,...y_x] such that 
-- for every y_k exist a,b,c in N with y_k=a^3+b^3=c^3+1 
hh(x:PI):List INT==
   r:List INT:=[]
   i:=0;a:=1
   repeat
      a:=a+1
      b:=1
      t:=a^3
      repeat
          b:=b+1
          b>=a=>break
          q:=t+b^3
          l:=gcd(q-1,223092870);l~=1 and (q-1)rem(l^3)~=0 =>0 -- if l|(q-1)=> l^3|(q-1)
          c:=round((q-1.)^(1./3.))::INT
          if c^3=q-1 then(r:=cons(q,r);i:=i+1;output[i,a,b,c];i>=x=>return reverse(r))

(3) -> h 12
   (3)
   [1729, 1092728, 3375001, 15438250, 121287376, 401947273, 3680797185,
    6352182209, 7856862273, 12422690497, 73244501505, 145697644729]
                                                       Type: List Integer             
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.