একত্রিত নম্বর


21

সজ্ঞা:

  • একটি ত্রিভুজ একটি বিবেচনা করা হয় সমকোণী ত্রিভুজ যদি ভেতরের কোণ এক ঠিক 90 ডিগ্রি হয়।
  • কোনও সংখ্যাকে যৌক্তিক হিসাবে বিবেচনা করা হয় যদি এটি পূর্ণসংখ্যার অনুপাতের দ্বারা প্রতিনিধিত্ব করা যায়, যেমন p/q, যেখানে উভয় pএবং qপূর্ণসংখ্যা হয়।
  • বেশ কয়েকটি nএকটি হল সর্বসম সংখ্যা অস্তিত্ব আছে যদি এলাকার সমকোণী ত্রিভুজ nযেখানে সব তিন পক্ষের মূলদ হয়।
  • এটি OEIS A003273

চ্যালেঞ্জ

এটি একটি চ্যালেঞ্জ। একটি ইনপুট নম্বর দেওয়া হয়েছে, একত্রিত সংখ্যা হিসাবে xএকটি স্বতন্ত্র এবং ধারাবাহিক মান আউটপুট এবং xএকত্রিত সংখ্যা xনা হলে একটি পৃথক স্বতন্ত্র এবং সামঞ্জস্যপূর্ণ মান output আউটপুট মানগুলি অবশ্যই আপনার ভাষায় সত্য / মিথ্যা হওয়া দরকার না।

বিশেষ বিধি

এই চ্যালেঞ্জের উদ্দেশ্যে, আপনি ধরে নিতে পারেন যে বার্চ এবং সুইনার্টন-ডায়ার অনুমানটি সত্য। বিকল্পভাবে, আপনি যদি বার্চ এবং সুইন্টারনার-ডায়ার অনুমানটি প্রমাণ করতে পারেন তবে আপনার $ 1,000,000 মিলেনিয়াম পুরষ্কার দাবি করুন। ;-)

উদাহরণ

( Trueএকত্রিত সংখ্যার জন্য এবং Falseঅন্যথায় ব্যবহার করে )।

5 True
6 True
108 False

বিধি এবং ব্যাখ্যা

  • ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক পদ্ধতি দ্বারা দেওয়া যেতে পারে ।
  • আপনি ফলাফলটি মুদ্রণ করতে বা এটিকে কোনও কার্য ফলাফল হিসাবে ফিরিয়ে দিতে পারেন। আউটপুট কি মান নিতে পারে তা দয়া করে আপনার জমা দিন।
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

3
ইনপুটটি কি ইতিবাচক পূর্ণসংখ্যা হয়?
লিন

আমার প্রাথমিক পদ্ধতিটি ছিল পাইথাগোরিয়ান ট্রিপল-এর ​​পায়ের অর্ধেক পণ্য না হওয়া পর্যন্ত একটি নির্বিচার স্কোয়ার সংখ্যার দ্বারা ইনপুটটিকে গুণিত করা, তবে আমি বুঝতে পেরেছিলাম যে অ-সংগৃহীত ইনপুটটির জন্য এটি বন্ধ করতে কিছুটা কঠিন হতে পারে।
অসম্পূর্ণ স্ট্রিং

@ শি'আন ঠিক আছে, তবে চ্যালেঞ্জগুলি স্বাবলম্বিত হওয়া উচিত।
লিন

@ লিন হ্যাঁ, ইনপুটটি ইতিবাচক পূর্ণসংখ্যা হবে।
অ্যাডমবর্কবার্ক

উত্তর:


8

আর, 179 173 142 141 137 135 134 বাইট

টুনেলের উপপাদ্যের উপর ভিত্তি করে একই যুক্তি ব্যবহার করে , 0যদি একত্রিতn হয় না এবং 1অন্যথায় কোনও ফিরিয়ে দেয় । ( কেবলমাত্র স্কোয়ার-ফ্রি পূর্ণসংখ্যার ক্ষেত্রে প্রয়োগ করার শর্তটি সীমাবদ্ধতার সন্ধান করতে আমার অনেক সময় লেগেছে ))

function(n){b=(-n:n)^2
for(i in b^!!b)n=n/i^(!n%%i)
P=1+n%%2
o=outer
!sum(!o(y<-o(8/P*b,2*b,"+")/P-n,z<-16/P*b,"+"),-2*!o(y,4*z,"+"))}

এটি অনলাইনে চেষ্টা করুন

দ্বারা আনা উন্নতি Arnaud এবং : Giuseppe সঙ্গে -3 ধন্যবাদ (চূড়ান্ত কোড বেশিরভাগই Guiseppe এর! হয়), রবিন

সিনট্যাক্স বিশ্লেষণ:

for(i in b[b>0])n=n/i^(!n%%i) #eliminates all square divisors of n
P=2^(n%%2)                    #n odd (2) or even (1)
o=outer                       #saves 3 bytes 
o(8/P*b,2*b,"+")/P-n          #all sums of (8/P)x^2+(2/P)*y^2-n
o(...,16/P*b,"+")             #all sums of above and (16/P)*z^2
o(...,4*z,"+"))               #all sums of above and (64/P)*z^2
!o(...,4*z,"+"))              #all sums of above equal to zero
!sum(!...,2*!...)             #are zeroes twice one another (Tunnell)

সঙ্গে Tunnell এর উপপাদ্য যে এন জানায় সর্বসম হয় যদি এবং কেবল যদি করতে পূর্ণসংখ্যা সমাধান সংখ্যার 2x² + + y² + + 8z² = n হল দুইবার হিসাবে অনেক 2x² করার পূর্ণসংখ্যা সমাধান নম্বর হিসাবে + + y² + + 32z² = ঢ যদি n অদ্ভুত এবং সংখ্যা 8x² + y² + 16z² = n এর পূর্ণসংখ্যার সমাধানগুলি 8x² + y² + 64z² = n এর পূর্ণসংখ্যার সংখ্যার দ্বিগুণ, যদি n হয় তবে।


1
পিপিসিজিতে আপনাকে স্বাগতম! লক্ষ্যটি যতটা সম্ভব সংক্ষিপ্ত করা। গল্ফ করার জন্য এই টিপস বা এই আর-নির্দিষ্ট টিপসটি সম্ভবত আপনি দেখতে পারেন ।
জিউসেপে

1
অনেক সাদা জায়গা আছে, এবং আমি এটি অনলাইনে চেষ্টা করার একটি লিঙ্ক অন্তর্ভুক্ত করার প্রস্তাব দিই ! আপনার কোড যাচাই করতে সহায়তা করতে :-)
জিউসেপে

1
আর গল্ফার চ্যাটে বিনা দ্বিধায় পৌঁছে যান ; আপনি ব্যবহার করে অবহিত করতে পারেন @[username]... আমি অনুমান করছি যে আপনি রবিন রাইডার কোড গল্ফের সাথে টানলেন ??
জিউসেপ

1
142 বাইট - বেনামে ফাংশনগুলি পুরোপুরি ঠিক আছে, এবং আমি কয়েকটি অন্যান্য গল্ফ তৈরি করেছি যা আমি ব্যাখ্যা করে খুশি হয়েছি
জিউসেপ

1
নিস! আপনি ব্যবহার করার কোন কারণ আছে -n:n? আমি টানেলের উপপাদটি পড়িনি, তবে আমার কাছে মনে n:0হচ্ছে এটি -1 বাইটের জন্যও ঠিক কাজ করবে ... এছাড়াও, টিপস টিপ, আপনি যদি টিআইওর শীর্ষে "লিঙ্ক" বোতামটি আঘাত করেন তবে আপনি সুন্দর পাবেন পিপিসি :-) অনুলিপি করার জন্য ফর্ম্যাটগুলি: সম্পাদনা: আমি দেখছি, এমন কিছু ঘটনা রয়েছে যেখানে n:0কাজ হয় না।
জিউসেপ

3

মরিচা - 282 বাইট

fn is(mut n:i64)->bool{let(mut v,p)=(vec![0;4],n as usize%2);while let Some(l)=(2..n).filter(|i|n%(i*i)==0).nth(0){n/=l*l;}for x in -n..=n{for y in -n..=n{for z in -n..=n{for i in 0..2{if n-6*x*x*(n+1)%2==2*x*x+(2-n%2)*(y*y+(24*i as i64+8)*z*z){v[2*p+i]+=1};}}}}v[2*p]==2*v[2*p+1]}
  • জেরলোল্ড বি টুনেলের উপপাদ্যটি ব্যবহার করুন , যা আমি আসলে বুঝতে পারি না, তবে যাইহোক এটি কাজ করছে বলে মনে হচ্ছে।
  • এটিকে 'বর্গক্ষেত্র মুক্ত' করতে তার সমস্ত বর্গক্ষেত্র দ্বারা বিভক্ত করুন, যেহেতু টানেলের উপপাদ্যের নীচে থাকা কাগজগুলিতে কেবল বর্গ-মুক্তের জন্য বর্ণিত হয়েছে।
    • আমি বিশ্বাস করি এটি কার্যকর হতে পারে কারণ প্রতিটি সংঘবদ্ধ সংখ্যা যখন বর্গ দ্বারা গুণিত হয় তখন একটি বৃহত একত্রিত সংখ্যা তৈরি করে এবং বিপরীতে। সুতরাং ছোট সংখ্যাটি পরীক্ষা করে আমরা আরও বড়টি যাচাই করতে পারি, যা আমাদের ক্ষেত্রে এন is (সমস্ত মুছে ফেলা স্কয়ারগুলি এক সাথে একটি বৃহত স্কোয়ার তৈরি করতে গুণ করা যায়)।
  • if n is odd, test if n = 2x2+y2+32z2 and/or 2x2+y2+ +8z- র2
    যদি এন হয় তবে, পরীক্ষা করুন যদি এন = হয় 8এক্স2+ +2Y2+ +64z- র2 এবং / অথবা 8এক্স2+ +2Y2+ +16z- র2
    • কোডের মধ্যেই, চারটি সমীকরণকে একটি লুপের মধ্যে, একটি / লকের ভিতরে মডুলো ব্যবহার করে স্মুশ করা হয়েছে
  • কোন সমীকরণের সাথে মিল আছে তার একটি মিল গণনা রাখুন
  • লুপিংয়ের পরে, টালিগুলির অনুপাত পরীক্ষা করুন (প্রতি টুনেল)

আরো দেখুন:

সমান / বিজোড় সংশোধন, ধন্যবাদ @ লেভেল রিভার সেন্ট


1
ওহ ভাল, এই কাজটি করার সময় আমি কেবল সি ++ উত্তরটি দেখতে পেয়েছিলাম যা ভুল ছিল ...
ডোন উজ্জ্বল

ধন্যবাদ লেভেল রিভার সেন্ট
উজ্জ্বল

3

সি ++ (জিসিসি) , 251 234 বাইট

আমার পক্ষ থেকে নির্বোধ টাইপগুলি নির্দেশ করার জন্য @ আরনাউল্ডকে ধন্যবাদ জানাই।

-17 বাইট @ সিলিংক্যাট ধন্যবাদ।

#import<cmath>
int a(int n){int s=sqrt(n),c,x=-s,y,z,i=1,X;for(;++i<n;)for(;n%(i*i)<1;n/=i*i);for(;x++<s;)for(y=-s;y++<s;)for(z=-s;z++<s;c+=n&1?2*(n==X+24*z*z)-(n==X):2*(n==4*x*x+2*X+48*z*z)-(n/2==2*x*x+X))X=2*x*x+y*y+8*z*z;return!c;}

এটি অনলাইন চেষ্টা করুন!

একত্রিত হলে 1 প্রদান করে n, অন্যথায় 0

কুইগুলি2কুই এছাড়াও একত্রিত হয় (অ্যালগোরিদম কিছু বর্গ-সমন্বিত সংখ্যার উপর বিরতি বলে মনে হচ্ছে।


1
@ আরনাউল্ড: আহা, এটি আমার পক্ষে একটি টাইপ ছিল। স্থির করেছি।
নীল এ।

1

জাভাস্ক্রিপ্ট (ES7), 165 বাইট

@ নীলা.এর উত্তরের মতো এটিও ভিত্তিক উপপাদ্যের এবং তাই ধরে নিয়েছে যে বার্চ এবং সুইন্টার্নটন-ডায়ার অনুমানটি সত্য।

একটি বুলিয়ান মান প্রদান করে।

n=>(r=(g=i=>i<n?g(i+!(n%i**2?0:n/=i*i)):n**.5|0)(s=2),g=(C,k=r)=>k+r&&g(C,k-1,C(k*k)))(x=>g(y=>g(z=>s+=2*(n==(X=(n&1?2:8)*x+(o=2-n%2)*y)+o*32*z)-(n==X+o*8*z))))|s==2

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

এনএন'R=এন'গুলি2

r = (                // we will eventually save isqrt(n) into r
  g = i =>           // g = recursive function taking an integer i
    i < n ?          //   if i is less than n:
      g(i + !(       //     do a recursive call with either i or i + 1
        n % i**2 ?   //     if n is not divisible by i²:
          0          //       yield 0 and therefore increment i
        :            //     else:
          n /= i * i //       divide n by i² and leave i unchanged
      ))             //     end of recursive call
    :                //   else:
      n ** .5 | 0    //     stop recursion and return isqrt(n)
  )(s = 2)           // initial call to g with i = s = 2

সি2-R<R

  g = (C, k = r) =>  // C = callback function, k = counter initialized to r
    k + r &&         //   if k is not equal to -r:
    g(               //     do a recursive call:
      C,             //       pass the callback function unchanged
      k - 1,         //       decrement k
      C(k * k)       //       invoke the callback function with k²
    )                //     end of recursive call

(এক্স,Y,z- র)[-R+ +1,R]3গুলি2একজনএন=বিএনএন2সিএন=ডিএনএন সমান, সাথে:

একজনএন=#{(এক্স,Y,z- র)[-R+ +1,R]3|এন=2এক্স2+ +Y2+ +32z- র2}বিএন=#{(এক্স,Y,z- র)[-R+ +1,R]3|এন=2এক্স2+ +Y2+ +8z- র2}সিএন=#{(এক্স,Y,z- র)[-R+ +1,R]3|এন=8এক্স2+ +2Y2+ +64z- র2}ডিএন=#{(এক্স,Y,z- র)[-R+ +1,R]3|এন=8এক্স2+ +2Y2+ +16z- র2}

g(x =>                            // for each x:      \    NB:
  g(y =>                          //   for each y:     >-- all these values are
    g(z =>                        //     for each z:  /    already squared by g
      s +=                        //       add to s:
        2 * (                     //         +2 if:
          n == (                  //           n is equal to either
            X =                   //           An if n is odd (o = 1)
            (n & 1 ? 2 : 8) * x + //           or Cn if n is even (o = 2)
            (o = 2 - n % 2) * y   //
          ) + o * 32 * z          //
        ) - (                     //         -1 if:
          n == X + o * 8 * z      //           n is equal to either
        )                         //           Bn if n is odd
    )                             //           or Dn if n is even
  )                               //
)                                 // if s in unchanged, then n is (assumed to be) congruent

1

রুবি , 126 বাইট

->n{[8,32].product(*[(-n..-t=1).map{|i|i*=i;n%i<1&&n/=i;i}*2+[0]]*3).map{|j|d=2-n%2
k,x,y,z=j
2*d*x+y+k*z==n/d&&t+=k-16}
t==1}

এটি অনলাইন চেষ্টা করুন!

অতিরিক্ত কপি তৈরির t=1পরিবর্তে স্কোয়ারের তালিকাটি ট্রিপলেটে প্রারম্ভিক এবং প্রসারিত করার জন্য একটি জায়গা খুঁজে পেয়েছিল q

রুবি , 129 বাইট

->n{t=0
[8,32].product(q=(-n..-1).map{|i|i*=i;n%i<1&&n/=i;i}*2+[0],q,q).map{|j|d=2-n%2
k,x,y,z=j
2*d*x+y+k*z==n/d&&t+=k-16}
t==0}

এটি অনলাইন চেষ্টা করুন!

অন্যান্য উত্তরের মতো টুনেলের উপপাদ্য ব্যবহার করুন। আমি নিম্নলিখিত হিসাবে একটি একক সমীকরণ ব্যবহার।

2*d*x^2 + y^2 + k*z^2 == n/d  where d=2 for even n and d=1 for odd n

আমরা মামলা পরীক্ষা k=8এবং k=32এবং চেক যদি সেখানে অনেক সমাধান চেয়ে দ্বিগুণ k=8চেয়ে k=32। এটি সমাধানের k-16জন্য tপ্রতিটি সময় যুক্ত করেই করা হয়। এটি হয় ক্ষেত্রে +16 k=32বা ক্ষেত্রে -8 k=8tফাংশন শেষে যদি প্রাথমিক মান হিসাবে একই হয় তবে সামগ্রিকভাবে সংখ্যাটি একত্রিত হয়।

পরীক্ষার সমীকরণের সমস্ত সমাধান সন্ধান করা প্রয়োজন। আমি +/- এর মধ্যে অনেকগুলি উত্তর পরীক্ষা করে দেখছি sqrt n। কোডগুলি সংক্ষিপ্ত করে তোলে তবে এই সীমাগুলির বাইরেও এটি পরীক্ষা করা পুরোপুরি ঠিক আছে, তবে কোনও সমাধান পাওয়া যাবে না কারণ সমীকরণের বাম দিকটি অতিক্রম করবে n। শুরুতে আমি যে জিনিসটি মিস করেছি তা হ'ল নেতিবাচক এবং ধনাত্মক x,y,zপৃথকভাবে বিবেচনা করা হয়। সুতরাং -3,0,3তিনটি স্কোয়ার ফলন করে 9,0,9এবং সমস্ত সমাধান পৃথকভাবে গণনা করতে হবে (0 অবশ্যই একবার গণনা 9করতে হবে এবং দুবার গণনা করতে হবে))

অবহেলিত কোড

->n{t=0                              #counter for solutions

  q=(-n..-1).map{|i|i*=i;n%i<1&&n/=i #make n square free by dividing by -n^2 to -1^2 as necessary 
  i}*2+[0]                           #return an array of squares, duplicate for 1^2 to n^2, and add the case 0 

  [8,32].product(q,q,q).map{|j|      #make a cartesian product of all possible values for k,x,y,z and iterate
    d=2-n%2                          #d=1 for odd n, 2 for even n
    k,x,y,z=j                        #unpack j. k=8,32. x,y,z are the squared values from q.
    2*d*x+y+k*z==n/d&&t+=k-16}       #test if the current values of k,x,y,z are a valid solution. If so, adjust t by k-16 as explained above.
t==0}                                #return true if t is the same as its initial value. otherwise false.

ইতিবাচক এবং নেতিবাচক সমাধান সম্পর্কে, এখানে একই, আমি এই পয়েন্ট মিস করার জন্য বেশ সময় নষ্ট!
শি'আন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.