একটি নির্দিষ্ট এলসিএম এবং জিসিডি সহ সংখ্যার জোড়া সন্ধান করুন


9

আমি আমার এক বন্ধুর সাথে গণিতের প্রশ্নে কাজ করছি, এবং আমরা সিদ্ধান্ত নিয়েছিলাম এমন একটি স্ক্রিপ্ট লিখব যা উত্তর খুঁজে পাবে। মূল প্রশ্নটি নিম্নরূপ:

দুটি প্রাকৃতিক সংখ্যার পার্থক্য 2010 এবং তাদের বৃহত্তম সাধারণ ডিনোমিনেটর তাদের সর্বনিম্ন সাধারণ গুণকের চেয়ে 2014 গুণ ছোট। সম্ভাব্য সমস্ত সমাধান সন্ধান করুন।

আমরা একে অপরের থেকে স্বাধীনভাবে প্রোগ্রামটি লেখা শুরু করি এবং এটি যখন কাজ করে তখন আমরা পরিচালিত করতে পারি এমন ন্যূনতম পরিমাণ বাইট পেতে এটি গল্ফ করার সিদ্ধান্ত নিয়েছিলাম। আমরা এই সুন্দর কোডটির লাইনটি একটি দুর্দান্ত 89 বাইটে শেষ করেছি।

from fractions import*;print[i for i in range(10**6)if i*(i+2010)/gcd(i,i+2010)**2==2014]

আমরা দেখতে চেয়েছিলাম যে কেউ কোডের একটি সংক্ষিপ্ত অংশ লিখতে পরিচালিত করে কিনা, যা প্রথম 1 মিলিয়ন এর গণনা করে। আপনি যদি প্রতিযোগিতার পক্ষে যথেষ্ট সাহসী হন তবে আপনি আপনার পছন্দ মতো যে কোনও ভাষা ব্যবহার করতে পারেন তবে আমরা আপনার কোডটি আমাদের সাথে তুলনা করতে পাইথন 2 পছন্দ করব।

সাধারণ নিয়ম প্রয়োগ হয়, সংক্ষিপ্ততম বাইট জয় win স্ট্যান্ডার্ড কোড গল্ফ লুফোলস প্রযোজ্য। স্ট্যান্ডার্ড "লুফোলস" যা আর মজার নয়

আনন্দ কর!


2
@ রেনবোল্ট: ঠিক আছে, কোনও ভাষা অনুমোদিত। অজগর সীমাবদ্ধতা তুলনা উদ্দেশ্যে ছিল। তবে আপনি যা চান তা কেবল করুন: ডি
সাম্মকো

3 এবং 5092 বাদে কি উত্তর আছে? 10,000,000 এর আগে আর কিছু খুঁজে পাচ্ছে না।
কেনেটিএম

@ কেনিটিএম: আমি ৪ এবং ৫০৯২ পেয়েছি। এবং হ্যাঁ, আমি মনে করি না অন্য কোনও আছে are
সাম্মকো

আরে, আপনি যা জিজ্ঞাসা করছেন তার প্রতিফলনের জন্য আমি আপনার শিরোনাম সম্পাদনা করেছি। আপনি যদি মনে করেন যে আমি কিছু মিস করেছি তবে এটিকে নির্দ্বিধায় ভাবুন।
FryAmTheEggman

উপায় দ্বারা পাইথন ট্যাগ সরানো।
টিমটেক

উত্তর:


21

গণিত, 8 বাইট

{4,5092}

প্রমাণ যে 4 এবং 5092 একমাত্র সমাধান: মূল সমস্যাটি আবার লিখতে পারে

x (x + 2010) = 2014 জিসিডি (x, x + 2010) 2

আসুন লেখার এক্স 2 যেমন একটি 2 3 একটি 3 5 একটি 5 ... আর এক্স 2 যেমন + + 2010 2 3 3 5 5 ... তারপর সমীকরণ হয়ে

2 2 + বি 2 3 3 + বি 3 5 5 + বি 5 … = 2014 2 2 মিনিট (একটি 2 , বি 2 ) 3 2 মিনিট (একটি 3 , খ 3 ) 5 2 মিনিট (একটি 5 , বি 5 )

2014 = 2 × 19 × 53 সাল থেকে আমাদের আছে

a পি + বি পি = ২ মিনিট (একটি পি , বি পি ) + {1 যদি পি ∈ {2, 19, 53}, 0 অন্য}

এইভাবে

a p = b p যদি পি ≠ 2, 19, 53
পি = বি পি ± 1 হয়

এইভাবে

x + 2010 = 2 ± 1 19 ± 1 53 ± 1 এক্স

কেবলমাত্র 8 টি পছন্দ রয়েছে এবং আমরা সহজেই পরীক্ষা করতে পারি যে 4 এবং 5092 কেবলমাত্র ইতিবাচক পূর্ণসংখ্যার সমাধান।

অপেক্ষা করুন, আমি শুনেছি লোকেরা স্ট্যান্ডার্ড লুফোলের চিৎকার করছে…

ম্যাথমেটিকা, 45 বাইট

Select[Range[9^7],2014GCD[#,s=#+2010]^2==s#&]

4

পাইথ 27 25

J2010fq+J4/*T+TJ^iTJ2U^T6

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

এটি আপনার অ্যালগরিদম মোটামুটি নির্লিপ্তভাবে ব্যবহার করে ... আমি আরও ভাল কিছু নিয়ে আসতে সক্ষম হতে পারি ...

মূলত মানগুলি ফিল্টার করে যেগুলি থেকে মানদণ্ড পূরণ হয় না range(10**6)

যে আড্ডায় এটি নির্দেশ করার জন্য @ xnor ধন্যবাদ gcd(x,x+2010)==gcd(x,2010)


3

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

FryAmTheEggman ইতিমধ্যে পরামর্শ দিয়েছে কীভাবে আপনার সমাধানটি 88 বাইট তৈরি করা যায় তাই আমি এটি পোস্ট করব না। তবে আমি ভেবেছিলাম পাইথন 3 এ আপনি কীভাবে আরও কম বাইট পেতে পারেন তা আমি দেখাব:

from fractions import*
x=10**6
while x:y=x+2010;x*y-gcd(x,y)**2*2014or print(x);x-=1

(টিপস জন্য FryAmTheEggman জন্য ধন্যবাদ)

এটি পাইথন 2 এ কাজ করে না কারণ printএটি কোনও ফাংশন নয়।

আমাদের অনুমতি দেওয়া হয়েছে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে আমরা যদি এর 9**9পরিবর্তে ব্যবহার করতে পারি তবে 10**6অন্য বাইট হতে পারতাম।


আমি জানতাম and/ এর সাথে এটি করার একটি উপায় আছে or... যদিও অজগর 3 এর কথা ভাবেননি;) প্রসঙ্গটি আরও: যদি অর্ডারটি কোনও ব্যাপার না, আমি মনে করি সেট করা x=10**6এবং while x:x-=1;...করাটি একটি বাইট সংক্ষিপ্ত।
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান প্রশ্নের চেহারা থেকে মনে হচ্ছে এটি অর্ডার সম্পর্কিত বিষয় বলে মনে হচ্ছে না তাই আমি এটিকে রাখব Thanks ধন্যবাদ!
Sp3000

2

আর, 75 টি অক্ষর

for(a in 1:1e6){q=1:a;b=a+2010;if(a*b/max(q[!a%%q&!b%%q])^2==2014)print(a)}

লাইন বিরতি সহ:

for(a in 1:1e6){
    q=1:a
    b=a+2010
    if(a*b/max(q[!a%%q&!b%%q])^2==2014)print(a)
    }

2

গল্ফস্ক্রিপ্ট (৪১ বাইট)

দুটি প্রাকৃতিক সংখ্যার পার্থক্য 2010 এবং তাদের বৃহত্তম সাধারণ ডিনোমিনেটর তাদের সর্বনিম্ন সাধারণ একাধিকের চেয়ে 2014 গুণ ছোট। সম্ভাব্য সমস্ত সমাধান সন্ধান করুন।

নাম্বারে কল করুন amএবং bmকোথায় gcd(a, b) = 1এবং ব্লগ করুন b > a। তারপরে তফাতটি m(b-a) = 2010এবং lcm(am, bm) = abm = 2014mতাই ab=2014

2014 এর কারণগুলি

1 * 2014
2 * 1007
19 * 106
38 * 53

এবং যেগুলির মধ্যে পার্থক্য রয়েছে যা 2010 এ বিভক্ত

1007 - 2 => m = 2, solution is 4, 2014
53 - 38 => m = 134, solution is 5092, 7102

যেহেতু আমি এমন কোনও ভাষায় অপারেটিং করছি যা অন্তর্নির্মিত জিসিডি বা এলসিএম নেই, তাই আমি মনে করি এই বিশ্লেষণটি সম্ভবত প্রোগ্রামটি ছোট করে:

44,{).2014{.2$/\@%!}:,~\2$- 2010,***}%0-`

যেখানে 44হয় floor(sqrt(2014))

একটি নির্বোধ লুপ ব্যবহার করে এটি বেশ কাছাকাছি পাওয়া সম্ভব:

10 6?,1>{.2010+.2${.@\%.}do;.*2014*@@*=},`

সুতরাং @ কেটিটিএম এর প্রমাণ যে (4,5092) একমাত্র সমাধানটি ভুল?
অপ্টিমাইজার

@ অপ্টিমাইজার, আপনি এটি ভুলভাবে পড়ছেন। তিনি আরও প্রমাণ করেছেন যে দুটি সমাধান রয়েছে এবং তারা আমার সমাধানগুলির মতো। তাঁর প্রমাণটি আমার (আইএমএও) এর চেয়ে অনুসরণ করা আরও শক্ত।
পিটার টেলর

আহ, সত্য। এবং হ্যাঁ, আপনার চেয়ে তার আরও জ্ঞান করা উচিত।
অপ্টিমাইজার

2

পার্ল 6 61 58 56 54 52

আপনার উত্স একটি মোটামুটি সরাসরি অনুবাদ দেয়

for ^10**6 ->\i{i.say if i*(i+2010)/(i gcd(i+2010))**2==2014}

gcd পার্ল 6 এ একটি ইনফিক্স বিকল্প।

^10**6সংক্ষিপ্ত 0 ..^ 10**6, যেখানে ^উপায়টি এই সংখ্যাটি ব্যাপ্তি থেকে বাদ দেয়।


অবশ্যই i gcd (i+2010)একই হিসাবে i gcd 2010আমি 3 টি অক্ষর সংরক্ষণ করতে পারি

for ^10**6 ->\i{i.say if i*(i+2010)/(i gcd 2010)**2==2014}

আমি এর $_পরিবর্তে যদি আমি ব্যবহার করি তবে আমি iআরও কয়েকটি অক্ষর সংরক্ষণ করতে পারি। (এর .sayজন্য সংক্ষিপ্ত $_.say)

for ^10**6 {.say if $_*($_+2010)/($_ gcd 2010)**2==2014}

আমি ... && .sayপরিবর্তে আরও কিছু অক্ষর ব্যবহার করে সংরক্ষণ করতে .say if ...পারি, কারণ আমার &&মতো দুটি দিকের জন্য আমার কোনও জায়গার প্রয়োজন নেই if

for ^10**6 {$_*($_+2010)/($_ gcd 2010)**2==2014&&.say}

যেহেতু আমি পূর্ববর্তী দুটি "অপ্টিমাইজেশান" করেছি তাই আমি বিবৃতি সংশোধক ফর্মটি ব্যবহার করতে পারি for, যার অর্থ আমি মুছে ফেলতে পারি {এবং }

$_*($_+2010)/($_ gcd 2010)**2==2014&&.say for ^10**6

আমি মনে করি যে এটি অন্যরকম অ্যালগোরিদম ব্যবহার না করেই যতটা ছোট।


2

জে, 26 বাইট

   I.((*.=+.*4--)2010+])i.1e6
4 5092

যারা অভিজাত 2-বাইট ক্রিয়া ... :)


1

ডায়ালগ এপিএল, 29 টি অক্ষর

      a←⍳10        ⍝ the integers up to 10
      a
1 2 3 4 5 6 7 8 9 10
      2010+a       ⍝ corresponding integers at distance 2010
2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
      a∨2010+a     ⍝ GCD-s between elements of a and 2010+a
1 2 3 2 5 6 1 2 3 10
      ⍝ All APL functions (e.g. + and ∨) are prefix-or-infix, right-associative,
      ⍝ and of the same precedence.
      a∧2010+a     ⍝ LCM-s
2011 2012 2013 4028 2015 2016 14119 8072 6057 2020
      ⍝ For which of them is the LCM 2014 times the GCD?
      (a∧2010+a)=2014×a∨2010+a
0 0 0 1 0 0 0 0 0 0
      ⍝ 0 means false, 1 means true
      ⍝ Filter the elements of "a" corresponding to the 1-s
      ((a∧2010+a)=2014×a∨2010+a) / a
4
      ⍝ Let's abstract this as a function by using curlies.
      ⍝ Omega (⍵) stands for the right argument.
      {((⍵∧2010+⍵)=2014×⍵∨2010+⍵) / ⍵} a
4
      ⍝ Up to a million instead of up to ten:
      {((⍵∧2010+⍵)=2014×⍵∨2010+⍵) / ⍵} ⍳1e6
4 5092
      ⍝ Hey, we can save a few characters by making 2010 the left argument, alpha (⍺)
      2010 {((⍵∧⍺+⍵)=2014×⍵∨⍺+⍵) / ⍵} ⍳1e6
4 5092
      ⍝ Remove a pair of parens by using the switch operator ⍨
      ⍝ An "operator" occurs to the right of a function and modifies its behaviour.
      ⍝ In this case A f⍨ B means the same as B f A
      ⍝ Left and right are swapped, hence "switch".
      2010 {⍵ /⍨ (⍵∧⍺+⍵)=2014×⍵∨⍺+⍵)} ⍳1e6
4 5092
      ⍝ That's 32 characters (modulo whitespace).  Not bad, but we can do better.
      ⍝ A "fork" is a sequence of 3 functions in isolation: f g h
      ⍝ It is evaluated as:  ⍺(f g h)⍵  ←→  (⍺ f ⍵)g(⍺ h ⍵)
      ⍝ If the first item is an array instead of a function: A f g  ←→  {A} f g
      ⍝ Forks are right-associative: f g h k l ←→ f g (h k l)
      2010 {⍵ /⍨ (⍺(⊢∧+)⍵)=2014×(⍺(⊢∨+)⍵)} ⍳1e6
4 5092
      ⍝ The "right tack" function (⊢) simply returns its right argument
      ⍝ Let's abuse forks a little further:
      2010 {⍵ /⍨ ⍺((⊢∧+)=(2014×(⊢∨+)))⍵} ⍳1e6
4 5092
      ⍝ ... and more
      2010 {⍺ (⊢(/⍨)((⊢∧+)=(2014×(⊢∨+)))) ⍵} ⍳1e6
4 5092
      ⍝ But {⍺ f ⍵} is equivalent to f
      2010 (⊢(/⍨)((⊢∧+)=(2014×(⊢∨+)))) ⍳1e6
4 5092
      ⍝ Note that now we are not mentioning ⍺ and ⍵ at all.
      ⍝ This is called "point-free style" or "tacit programming".
      ⍝ Removing some unnecessary parens and whitespace:
      2010(⊢(/⍨)(⊢∧+)=2014×⊢∨+)⍳1e6
4 5092
      ⍝ How many characters?
      ⍴'2010(⊢(/⍨)(⊢∧+)=2014×⊢∨+)⍳1e6'
29

1

PARI / GP, 42 বাইট

[n|n<-[1..8!],2014*gcd(n,t=n+2010)^2==n*t]

আমি অনুভব করি যে জিপির fordivকনস্ট্রাক্ট ব্যবহার করে একটি অত্যন্ত মার্জিত সমাধান রয়েছে তবে নিখরচায় ব্রেভিটির জন্য এটি এই সমাধানটির সাথে প্রতিযোগিতা করতে পারেনি।


0

র‌্যাকেট, 72 টি অক্ষর

(filter(λ(i)(=(/(*(+ i 2010)i)(expt(gcd(+ i 2010)i)2))2014))(range 1e6))

1
র‌্যাকেট কি আইএসও -8859-7 এর সাথে কাজ করে? অন্যথায় আমি λ1 বাইট হিসাবে গণনা করি না ।
কেনেটিএম

0

হাস্কেল, ৫২ টি চর

show [x|x<-[1..6^8],x*(x+2010)==2014*(gcd x 2010)^2]

হাস্কেল ইন্টারেক্টিভ পরিবেশে কাজ করে জিএইচসিআই।

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