পেন্টাগোনাল সংখ্যা থেকে তৈরি পেন্টাগোনাল সংখ্যা


15

ভূমিকা

একজন পঁচকোণী সংখ্যা ( A000326 ) সূত্র দ্বারা উৎপন্ন হয় পি এন = 0.5 × (3N 2 -n) । অথবা আপনি কেবল ব্যবহৃত বিন্দুর পরিমাণ গণনা করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

প্রথম কয়েকটি পেন্টাগোনাল সংখ্যাগুলি খুঁজতে আপনি সূত্রটি বা উপরের জিএফ ব্যবহার করতে পারেন:

1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330, 376, 425, 477, etc...

এর পরে, আমাদের একটানা x সংখ্যার যোগফল গণনা করতে হবে ।

উদাহরণস্বরূপ, x = 4 হলে আমাদের পি এন + পি এন + 1 + পি এন + 2 + পি এন + 3 (যা 4 টি পদ নিয়ে গঠিত ) দেখতে হবে। পঞ্চভুজ সংখ্যাগুলির যোগফল যদি পঞ্চভুজ সংখ্যা হয় তবে আমরা এটিকে পঞ্চভুজীয় পঞ্চভুজ নম্বর বলব

জন্য এক্স = 4 , ক্ষুদ্রতম পঁচকোণী পঞ্চভূজ সংখ্যা 330যার তৈরি হয়, 4 পরপর পঁচকোণী সংখ্যা: 51, 70, 92, 117। সুতরাং, যখন ইনপুট হয় 4, আপনার ফাংশন প্রোগ্রাম আউটপুট করা উচিত 330


কার্য

  • যখন 1 এর চেয়ে বড় পূর্ণসংখ্যা দেওয়া হয়, তখন ক্ষুদ্রতম পেন্টাগোনাল পঞ্চভুজ সংখ্যাটি আউটপুট দেয়।
  • আপনি কোনও ফাংশন বা একটি প্রোগ্রাম সরবরাহ করতে পারেন।
  • দ্রষ্টব্য: x = 3 এর কোনও সমাধান নেই । এর অর্থ হ'ল যদি প্রথম 10000 পঞ্চভৌল সংখ্যা থেকে কোনও সংখ্যা তৈরি করা না যায় , আপনার অবশ্যই উপযুক্ত বাছাই করা কম্পিউটিং এবং আউটপুট বন্ধ করতে হবে।
  • এটি , তাই সর্বনিম্ন পরিমাণ বাইটের সাথে জমা দেওয়া!

পরীক্ষার কেস:

Input: 2
Output: 1926 (which comes from 925, 1001)

Input: 3
Output: ?

Input: 4
Output: 330 (which comes from 51, 70, 92, 117)

Input: 5
Output: 44290 (which comes from 8400, 8626, 8855, 9087, 9322)

Input: 6
Output: 651 (which comes from 51, 70, 92, 117, 145, 176)

Input: 7
Output: 287 (which comes from 5, 12, 22, 35, 51, 70, 92)

Input: 8
Output: ?

Input: 9
Output: 12105 (which comes from 1001, 1080, 1162, 1247, 1335, 1426, 1520, 1617, 1717)

Input: 10
Output: ?

আরও বড় সংখ্যা দেওয়া যেতে পারে:

Input: 37
Output: 32782

Input: 55
Output: 71349465

Input: 71
Output: 24565290

4
আইএমও এটা কেউ কি আছেন যিনি বিশ্লেষণমূলক সমাধান সঙ্গে আসে আপ যা কিনা সমাধান চেয়ে কম হয় চেক করতে তাদের এমন পদ্ধতির মাধ্যমে কঠিন মামলা সমাধান করতে পারে দণ্ডিত পাগলামি10001-x
পিটার টেলর

1
@ পিটারটেলর আরও কঠিন ক্ষেত্রে আপনি যেমন বোঝাতে চাইছেন x = 3, যার কোনও সমাধান নেই?
আদনান

4
বৃহত্তম পরীক্ষার কেস যা ফলাফল দেয়: 9919->496458299155
মার্টিন ইন্ডার

না, আমি বলতে চাইছি এমন কেসগুলির সমাধান রয়েছে যাগুলি যোগফলগুলিতে বৃহত্তর পেন্টাগোনাল সংখ্যা ব্যবহার করে।
পিটার টেলর

1
আমি 10,000 টি সীমা সম্পর্কে নিশ্চিত নই: যোগফল তৈরির সংখ্যাগুলি কি প্রথম 10,000 পঞ্চভৌনিক সংখ্যাগুলি থেকে আসা উচিত, তবে যোগফলটি নয়, বা যোগফলটিও প্রথম 10,000 এর মধ্যে হবে?
নিমি

উত্তর:


4

সিজেম, 29 বাইট

6e5{)_3*(*2/}%_A4#<riew::+&1<

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

চালাতে কয়েক সেকেন্ড সময় নেয়।

ব্যাখ্যা

প্রথমত, আমাদের কতগুলি পঞ্চভুজিক সংখ্যা সম্ভাব্য পরিমাণ হিসাবে বিবেচনা করতে হবে তা যাচাই করতে হবে। প্রথম 10,000 পঞ্চভুজ সংখ্যাগুলির যোগফল 500050000000। এর চেয়ে প্রথম পঞ্চভূত সংখ্যাটি 577,380 তম।

6e5       e# 600,000 (a short number that's a bit bigger than we need).
{         e# Map this block onto every number from 0 to 599,999...
  )       e#   Increment.
  _3*(*2/ e#   Apply the pentagonal number formula given in the challenge.
}%
_         e# Make a copy.
A4#<      e# Truncate to the first 10,000 elements.
ri        e# Read input and convert to integer.
ew        e# Get sublists of that length.
::+       e# Sum each sublist.
&         e# Set intersection with all 600k pentagonal numbers computed earlier.
1<        e# Truncate to the first result.

আমি সবচেয়ে বড় ইনপুটগুলি খুঁজে বের করতে কিছুটা পরিবর্তিত প্রোগ্রাম ব্যবহার করেছি যা একটি খালি নয় এমন সমাধান দেয়। 9,000 এর চেয়ে বেশি ইনপুটগুলির জন্য এই সমস্ত সমাধান:

9919 -> 496458299155
9577 -> 446991927537
9499 -> 455533474060
9241 -> 401702906276
9017 -> 429351677617

4

লুয়া, 142 বাইট

p={}o={}n=...for i=1,10^4 do p[i]=(3*i^2-i)/2o[p[i]]=1 end for i=0,10^4-n do s=0 for j=1,n do s=s+p[i+j]end if(o[s])then print(s)break end end

Ungolfed

p={}o={}n=tonumber(...)
for i=1,10^4 do 
    p[i]=(3*i^2-i)/2o[p[i]]=1 
end
for i=0,10^4-n do 
    s=0 
    for j=1,n do 
        s=s+p[i+j]
    end 
    if(o[s])then 
        print(s)
        break 
    end 
end

হ্যাঁ টেবিলগুলি উল্টানোর জন্য!

142 বাইট আপডেট করুন: অতিরিক্ত অতিরিক্ত 'টনম্বার' ফাংশন কল সরিয়ে 10 বাইট সংরক্ষণ করা হয়েছে।


3

হাস্কেল, 109 বাইট

p=map(\n->div(3*n^2-n)2)[1..10^7]
(%)=(sum.).take
x#l|length l<x=0|elem(x%l)p=x%l|1<2=x#tail l
(#take(10^4)p)

রিটার্নস 0আছে কিনা কোন পঁচকোণী পঞ্চভূজ সংখ্যা।

ব্যবহারের উদাহরণ (শেষ করতে কিছুটা সময় নেয়): map (#take(10^4)p) [1..10]-> [1,1926,0,330,44290,651,287,0,12105,0]

এটি কম-বেশি সংজ্ঞাটির প্রত্যক্ষ বাস্তবায়ন: যদি প্রথম xউপাদানের যোগফল তালিকায় থাকে তবে আউটপুট দিন, অন্যথায় তালিকার লেজটি দিয়ে আবার চেষ্টা করুন। প্রথম 10,000 পেন্টাগোনাল সংখ্যা দিয়ে শুরু করুন, থামুন এবং 0তালিকাটিতে xউপাদানগুলির চেয়ে কম থাকলে ফিরে আসুন।


3

প্যারি / জিপি, by১ বাইট

আমি ispolygonalPARI / GP তে ফাংশনটি পছন্দ করি ।

x->[p|p<-vector(10^4,i,sum(n=i,i+x-1,(3*n^2-n)/2)),ispolygonal(p,5)][1]

3

পাইথন 3, 144 বাইট

R,P=range,list(map(lambda n:(3*n*n-n)/2,R(1,10001)))
def F(X):
 for a in R(0,len(P)-X):
    S=sum(P[a:a+X])
    if(1+(1+24*S)**.5)%6==0:print(S);break

এটি পঞ্চভুজ সংখ্যার সংজ্ঞাটিকে বিপরীত করে; যদি পি (এন) = (3 এন ^ 2-এন) / 2, তবে প্রদত্ত পি একটি পঞ্চভুজ সংখ্যা হবে iff (1 + বর্গ (24 * পি + 1)) / 6 একটি পূর্ণসংখ্যা। (প্রযুক্তিগতভাবে এটির (1-স্কয়ার্ট (24 * পি + 1)) / 6 এর দিকেও নজর দেওয়া উচিত, তবে এটি সর্বদা নেতিবাচক হওয়া উচিত)) এখানে প্রস্তাবিত হিসাবে দুটি পৃথক ইনডেন্টেশন স্তর হিসাবে স্পেস এবং ট্যাব ব্যবহার করে । এটি পেন্টাগোনাল পঞ্চভুজ সংখ্যাটি খুঁজে না পাওয়া থাকলে কিছুই আউটপুট দেয় না; আমি বিশ্বাস করি ঠিক আছে?

আমি দৃ strongly়ভাবে বিশ্বাস করি যে আমার চেয়ে আরও চতুর কেউ এটিকে আরও ছোট করার কোনও উপায় খুঁজে পেতে পারে, সম্ভবত লুপের আশেপাশে।


2

ল্যাবভিউ, 39 ল্যাবভিউ পুরষ্কার

এবার এর কোনও জিআইএফ চলছে না।

লুপের ম্যাথ নোড সমস্ত সংখ্যার একটি অ্যারে তৈরি করে। সাব-অ্যারে নিন, উপাদান যুক্ত করুন, সেই নম্বরটি অনুসন্ধান করুন, যদি পাওয়া যায় সূচি গ্রহণ করুন এবং লুপ বন্ধ করুন।

একটি অবৈধ ইনপুট সর্বোচ্চ পেন্টাগোনাল সংখ্যা রাখে out


2

আর, 114 100 বাইট

k=.5*(3*(t=1:1e6)^2-t);z=1;for(i in 1:(1e4-(n=scan()-1)))z[i]=sum(k[i:(i+n)]);cat(intersect(k,z)[1])

অসম্পূর্ণ

k=.5*(3*(t=1:1e6)^2-t)                 # map all pentagon numbers up to 1e6
z=1                                    # create a vector
for(i in 1:(1e4-(n=scan()-1))){        # from 1 to 10.000 - n loop
  z[i]=sum(k[i:(i+n)])}                # get the sum of all pentagon numbers i:(i+n)
cat(intersect(k,z)[1])                 # see which sums is a pentagon number itself, plot the first

2

জেলি , 30 বাইট

×24‘½‘%6¬Oị
15ȷ7RÇṫ³R$zȷ.5ZSÇḢ

এই কোডটি জেলির এই সংস্করণটির সাথে কাজ করে এবং নিম্নলিখিত বাইনারি কোডের সমতুল্য:

0000000: 94 32 34 b2 90 b2 25 36 87 4f b1 0a 31 35 a0  .24...%6.O..15.
000000f: 37 52 92 ad 8b 52 24 7a a0 2e 35 5a 53 92 a6  7R...R$z..5ZS..

এটি অনলাইনে অনুবাদকের কাছে ক্ষুধার্ত এবং ধীরে ধীরে ক্ষুধার্ত, কারণ এটি পেন্টাগোনালটির জন্য প্রথম 150,000,000 টি পরীক্ষা করে (149,995,000 টি 10,000 তম হিসাবে ঘটে) পঁচকোণী নম্বর)।

আরও বুদ্ধিমান কিছুতে সীমাটি সংক্ষিপ্ত করে আপনি এটি অনলাইনে চেষ্টা করতে পারেন !ছোট যথেষ্ট ইনপুট জন্য।

ধারণা

পেন্টাগোনাল সংখ্যা সম্পর্কে একটি জ্ঞাত ফলাফল হ'ল x যদি পঞ্চভুজ হয় এবং কেবলমাত্র বর্গক্ষেত্র (24x + 1) - 1 দ্বারা 6 দ্বারা বিভাজ্য

প্রথম 10,000 পেন্টাগোনাল সংখ্যা গণনা করার পরিবর্তে আমরা একটি সহায়ক লিঙ্কটি সংজ্ঞায়িত করি যা প্রদত্ত অ্যারে থেকে অ-পঞ্চভুজ সংখ্যাগুলি সরিয়ে দেয়। কেন? কারণ জেলি এর সর্বশেষতম সংস্করণ যা এই চ্যালেঞ্জটির পূর্বাভাস দেয় তার তালিকাগুলি ছেদ করার কোনও বুদ্ধিমান উপায় নেই ...

কোড

×24‘½‘%6¬Oị  Define the aforementioned helper link. Left argument: a (list)

×24          Multiply each list item by 24.
   ‘         Increment each product.
    ½        Apply square root to each result.
     ’       Decrement each square root.
      %6     Compute all remainders of division by 6.
        ¬    Apply logical NOT.
         O   Get the indices of ones.
          ị  Hook; get the elements of a at those indices.

15ȷ7RÇṫ³R$zȷ.5ZSÇḢ  Define the main link. Input: x

15ȷ7R               Yields [1, ..., 1.5e8].
     Ç              Apply the helper link; keep only pentagonal numbers.
       ³R$          Yield r = [1, ..., x].
      ṫ             Remove the first y-1 pentagonal numbers for each y in r.
          zȷ.5      Transpose the resulting array, padding with sqrt(10).
              Z     Transpose once more. The shifted lists have now been padded.
                    This makes sure incomplete sums (i.e., of less than x
                    pentagonal numbers) will not be integers.
               S    Compute all sums.
                Ç   Apply the helper link once more.
                 Ḣ  Select the first match, if any.

জেলি, 21 বাইট (প্রতিদ্বন্দ্বী)

ȷ6Rµ²×3_¹Hµḣȷ4ṡ³ZSf¹Ḣ

জেলির সর্বশেষতম সংস্করণে দুটি নতুন বৈশিষ্ট্য রয়েছে (ওভারল্যাপিং স্লাইস এবং তালিকা ফিল্টারিং / ছেদ দেওয়া) এবং একটি বাগ ফিক্স, যা অনেক কম বাইট গণনা মঞ্জুরি দেয়।

এই কোডটি আমার ডেস্কটপ কম্পিউটারে সূক্ষ্মভাবে কাজ করে, তবে টিআইওর সময়সীমাটি ধীরে ধীরে চালিত করা একটি বাচ্চা। অনলাইনে চেষ্টা করার জন্য !(পর্যাপ্ত ছোট ইনপুটগুলির জন্য), আমাদের আবার প্রাথমিক ব্যাপ্তি হ্রাস করতে হবে।

কিভাবে এটা কাজ করে

ȷ6Rµ²×3_¹Hµḣȷ4ṡ³ZSf¹Ḣ  Input: x

ȷ6R                    Yield [1, ..., 1,000,000].
   µ                   Begin a new, monadic chain.
    ²                  Square each number in the range.
     ×3                Multiply the squares by 3.
       _¹              Subtract the numbers from the range.
         H             Halve each difference.
                       This yields the first 1,000,000 pentagonal numbers.
          µ            Begin a new, monadic chain.
           ḣȷ4         Keep only the first 10,000 pentagonal numbers.
              ṡ³       Yield all overlapping slices of length x.
                ZS     Transpose and sum. This computes the sum of each slice.
                  f¹   Filter; intersect with the long list of pentagonal numbers.
                    Ḣ  Select the first match, if any.

2

গণিত 85 85 বাইট

n=577380;Intersection[#(3#-1)/2&/@Range@n,Table[#((#-1)^2+x(3#-4+3x))/2,{x,n}]][[1]]&

পি 10 4 এ তাত্ক্ষণিকভাবে অনুসন্ধান করতে পারে ।


0

অ্যাক্সিয়াম, 157 বাইট

p(n)==(3*n*n-n)quo 2;f(x)==(a:=0;for i in 1..x repeat a:=a+p(i);for j in 1..10000 repeat(p(floor((1+sqrt(1.+24*a))/6)::INT)=a=>return a;a:=a+p(j+x)-p(j));-1)

অসম্পূর্ণ এবং ফলাফল

h(x:PI):INT==
   a:=0;for i in 1..x repeat a:=a+p(i) -- sum(p(i),i=1..x)
   for j in 1..10000 repeat
      p(floor((1+sqrt(1.+24*a))/6)::INT)=a=>return a
      a:=a+p(j+x)-p(j)
   -1

(5) -> [[i,f(i)] for i in 1..10]
   (5)
   [[1,1], [2,1926], [3,- 1], [4,330], [5,44290], [6,651], [7,287], [8,- 1],
    [9,12105], [10,- 1]]
                                                  Type: List List Integer

সম্প্রসারণ: আমরা ফলাফল "এ" ব্যবহার করে এনটি পেতে পারি, নীচে দেখুন

a=(3*n^2-n)/2 => 3*n^2-n-2*a=0 => n=floor((1+sqrt(1.+24*a))/6)::INT

[1 + বর্গক্ষেত্র (...) ব্যবহার করুন কারণ এন> 0]

এর উপরের অর্থ হ'ল যদি এমন একটি N0 থাকে তবে

p(n0)=a 

চেয়ে

n0=floor((1+sqrt(1.+24*a))/6)::INT

আফার যে আমাদের তা নিশ্চিত করতে হবে যে p (n0) = a নিশ্চিত হওয়ার জন্য (কারণ এটি সর্বদা এটি হয় না)

তবে মূল কৌশলটি যোগফলটি করবে

a:=sum(p(i),i=1..x) [x elements sum] 

কেবল শুরুতে এবং পরবর্তী x উপাদানগুলি সহজেই ব্যবহার করে যোগ করুন

a=a+p(x+1)-p(1)=sum(p(i), i=2..x+1)

এবং অন্যান্য অঙ্কের জন্য (উপরের বিবৃতিতে a: = a + p (j + x) -p (j)) ব্যবহার করে। এর অর্থ এটি লুপের ভিতরে এক নম্বর x উপাদান যোগফলের প্রয়োজন হয় না ... ..



0

জাভাস্ক্রিপ্ট 93 বাইট

p=i=>i>0&&3*i*i-i>>1
f=(x,i=1,t=0)=>i<1e4?(24*(t+=p(i)-p(i-x))+1)**.5%6==5&i>x?t:f(x,i+1,t):0

console.log(f(4))
console.log(f(5))
console.log(f(6))
console.log(f(7))
console.log(f(8))
console.log(f(9919)==496458299155)
console.log(f(9577)==446991927537)
console.log(f(9499)==455533474060)
console.log(f(9241)==401702906276)
console.log(f(9017)==429351677617)
console.log(f(9))
console.log(f(10))

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