দু'টি সংখ্যাকে তাদের সর্বনিম্ন সাধারণ একাধিক সংরক্ষণের সময় সহ-প্রধান করুন


20

দুটি ধনাত্মক পূর্ণসংখ্যা aএবং b, দুটি ধনাত্মক পূর্ণসংখ্যার ফলাফল দেয় cএবং dএটি:

যদি একাধিক সম্ভাব্য উত্তর থাকে তবে আপনি কেবলমাত্র একটি বা সমস্তগুলির আউটপুট দিতে পারেন।

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

 a  b  c  d
12 18  4  9
18 12  9  4
 5  7  5  7
 3  6  1  6 or 3 2
 9  9  9  1 or 1 9
 6 15  2 15 or 6 5
 1  1  1  1

এটি । বাইট জিতে সংক্ষিপ্ত উত্তর।


আমাকে ফিরে আসা কী থামবে (1, এলসিএম)?
নিল

1
@ নীল প্রয়োজনীয়তা যা dভাগ হয়b
লিকি নুন

4
হতে পারে আপনার এলসিএম সংজ্ঞায়িত করা উচিত বা কমপক্ষে সংক্ষিপ্ত বিবরণ ব্যবহার করা উচিত নয়। আমি জানতাম না কি জন্য কিছু জিজ্ঞাসা করা হয়েছিল।
গম উইজার্ড

উত্তর:


7

জেলি , 21 13 বাইট

ÆEz®0iṂ$¦€ZÆẸ

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

যদি a = 2 A · 3 B · 5 C ·… এবং খ = 2 α · 3 β · 5 γ ·… , তবে আমরা গণনা করি

  • সি = 2 এ> α? এ: 0 · 3 বি> β? বি: 0 · 5 সি> γ? সি: 0 ·…

  • d = 2 এ> α? 0: α · 3 বি> β? 0: β β · 5 সি> γ? 0: γ ·…

এখন lcm (c, d) = 2 সর্বোচ্চ (A> α? এ: 0, এ> α? 0: α) ·… = 2 সর্বোচ্চ (ক, A) · 3 সর্বোচ্চ (বি, β) ·… = এলসিএম ( ক, খ)

এবং জিসিডি (সি, ডি) = 2 মিনিট (এ> α? এ: 0, এ> α? 0: α) ·… = 2 0 · 3 0 · 5 0 ·… = 1

অন্য কথায়: (সি, ডি) = (ক, খ) থেকে শুরু করুন । তারপরে, প্রতিটি প্রধানের জন্য, সেই প্রধানটিকে উভয়ভাগে সি এর ভাগ্য নির্ধারণের বাইরে ভাগ করুন বা : যেটা যে মৌলিক জন্য ক্ষুদ্রতম এক্সপোনেন্ট হয়েছে। (এই বাস্তবায়নে, টাই করার ক্ষেত্রে, সি এর ঘনিষ্ঠ লোকটি হারায়))

সুতরাং যদি একটি = 2250 = 2 1 · 3 2 · 5 3 এবং খ = 360 = 2 3 · 3 হয় 2 · 5 1 ,

তারপরে সি = 2 0 · 3 0 · 5 3 = 125 এবং ডি = 2 3 · 3 2 · 5 0 = 72

জোনাথন অ্যালান দারুণ এক 8 টি বাইট গল্ফ করলেন! ধন্যবাদ Thank


এটি আমার আসল অ্যালগরিদম ... পার্ল অ্যালগরিদম আরও ভাল।
লিকি নুন

খুব সুন্দর. এখানে এটি 12 বাইটে রয়েছে
জোনাথন অ্যালান

এখানে আরও 12 বাইটারÆEZ×Ụ’$€$ZÆẸ
মাইল

এটি এখন দেয় [1,18]জন্য [15,18]। প্রাথমিক সংস্করণটি সঠিক উত্তরটি ( [5,18]) প্রদান করছিল ।
আর্নৌল্ড

1
আহ - হ্যাঁ, আমাদের ট্রান্সপোজটিতে শূন্যের ফিলার দরকার need ÆEz®0iṂ$¦€ZÆẸ13 এর জন্য কৌশলটি করা উচিত
জোনাথন অ্যালান

4

আর, 143 139 123 বাইট

f=function(a,b,q=1:(a*b))for(i in 1:a)for(j in 1:b)if(!a%%i+b%%j&max(q[!i%%q+j%%q])<2&i*j==min(q[!q%%a+q%%b]))cat(i,j,"\n")

(এই 19 বাইট বন্ধের জন্য @ জিউস্প্পিকে ধন্যবাদ!)

ইনডেন্টেশন, নিউলাইন এবং কিছু ব্যাখ্যা সহ:

f=function(a,b,
           q=1:(a*b)) #Defined as function arguments defaults to avoid having to use curly brackets
    for(i in 1:a)
        for(j in 1:b)
            if(!a%%i + b%%j & #Is a divided by c and b divided by d
               max(q[!i%%q+j%%q])<2 & #Are c and d coprimes
               i*j==min(q[!q%%a+q%%b])) #Is this the same lcm
                   cat(i,j,"\n") #Then print

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

> f=function(a,b,q=1:(a*b))for(i in 1:a)for(j in 1:b)if(!a%%i+b%%j&max(q[!i%%q+j%%q])<2&i*j==min(q[!q%%a+q%%b]))cat(i,j,"\n")
> f(5,7)
5 7 
> f(12,18)
4 9 
> f(6,15)
2 15 
6 5 
> f(1,1)
1 1 

!বেশী প্রাধান্য রয়েছে &এবং |কিন্তু নিম্ন চেয়ে +এবং *; আপনি কয়েক বাইট যেভাবে গল্ফ করতে সক্ষম হওয়া উচিত; অর্থাত, !i%%q&j%%qসমতূল্য হওয়া উচিত!i%%q+j%%q
: Giuseppe

1
ঠিক আছে ভাল পর্যবেক্ষণ: যদি GCD(c,d)==1, তাহলে LCM(c,d)==c*d। সুতরাং আমরা পরীক্ষা করতে পারি GCD(c,d)==1এবং তারপরে চেক করতে পারি c*d==a*b/GCD(a,b)যেহেতু পরবর্তীটি কিনা LCM(a,b)...
জিউসেপে

1
প্রকৃতপক্ষে! (যদিও গণনা করা a*b/GCD(a,b)তার চেয়ে কম নয় LCM(a,b))।
প্ল্যানাপাস

120 বাইট - বেনামী ফাংশন + + আক্ষরিক সম্পর্কে newline জন্য -3 বাইট
: Giuseppe

4

হুশ , 10 বাইট

→ÖF§-⌋⌉ΠmḊ

পাশবিক বল. তালিকা নেয় এবং রিটার্ন দেয় এবং দু'টিরও বেশি সংখ্যার জন্যও কাজ করে। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

→ÖF§-⌋⌉ΠmḊ  Implicit input, say [6,15]
        mḊ  Map divisors: [[1,2,3,6],[1,3,5,15]]
       Π    Cartesian product:[[1,1],[2,1],[1,3],[2,3],[3,1],[1,5],[3,3],[6,1],[1,15],[2,5],[3,5],[6,3],[2,15],[6,5],[3,15],[6,15]]
 Ö          Sort by
  F         reduce by
     ⌉      lcm
   -⌋       minus gcd: [[1,1],[3,3],[2,1],[1,3],[3,1],[6,3],[1,5],[2,3],[6,1],[2,5],[3,15],[1,15],[3,5],[6,15],[2,15],[6,5]]
→           Get last element: [6,5]

3

গণিত, 82 বাইট

#&@@Select[Subsets[Flatten@Divisors[{t=#,r=#2}],{2}],GCD@@#==1&&LCM@@#==t~LCM~r&]&

আমি নিশ্চিত নই, তবে আপনি কি বাইট বাঁচানোর Select[...][[1]]পরিবর্তে তালিকার সূচি ব্যবহার করতে পারবেন না First@Select[...]?
জোনাথন ফ্রেচ

হ্যাঁ, তবে তারপরে আমি আরও একটি সংরক্ষণ করার #&@@পরিবর্তে ব্যবহার করতে পারি [[1]];-)
J42161217

3

জাভাস্ক্রিপ্ট (ES6), 90 84 80 বাইট

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (a)(b)এবং 2 পূর্ণসংখ্যার অ্যারে প্রদান করে।

a=>g=(b,c=1)=>(G=(a,b)=>b?G(b,a%b):a)(c,d=a*b/G(a,b)/c)-1|a%c|b%d?g(b,c+1):[c,d]

পরীক্ষার মামলা

কিভাবে?

a =>                            // a = first input
  g = (                         // g = recursive function that takes:
    b,                          //   b = second input
    c = 1                       //   c = first output divisor, initially set to 1
  ) =>                          //
    (G = (a, b) =>              // G = function that takes a and b
      b ? G(b, a % b) : a       //     and returns the greatest common divisor
    )(                          // we call it with:
      c,                        //   - c
      d = a * b / G(a, b) / c   //   - d = LCM(a, b) / c = a * b / GCD(a, b) / c
    ) - 1 |                     // if the result is not 1 (i.e. c and d are not coprime)
    a % c |                     // or c does not divide a
    b % d ?                     // or d does not divide b:
      g(b, c + 1)               //   do a recursive call with c + 1
    :                           // else:
      [c, d]                    //   return [c, d], a valid factorization of the LCM


3

হাস্কেল ,50 48 47 45 42 বাইট

(?)=gcd;a!b|c<-div a$a?b=(c*c?b,div b$c?b)

আইডিয়া: আমি লক্ষ্য করেছি যে c*d = a*b/gcd(a,b)। সুতরাং অ্যালগরিদম দুটি পদক্ষেপ সম্পাদন করে:

  1. c' = a/gcd(a,b)এবং দিয়ে শুরু d' = b। এটি ব্যতীত সমস্ত প্রয়োজনীয়তা পূরণ করে c'এবং d'সহ-প্রধান হতে হবে।
  2. তাদের সহ-প্রধানমন্ত্রী করার জন্য, আমি গণনা করি e = gcd(c',d')এবং তারপরে সেট c = c'*eএবং d = d'/e। এটি সমস্ত বৈশিষ্ট্য রাখে (যেহেতু সম্মিলিত উপাদানগুলি একই থাকে) তবে যেহেতু আমি সমস্ত ভাগ করা উপাদানগুলি থেকে সরিয়েছি d, তাই আমি তৈরি cএবং dকপিরাইট করি।

আমার বাস্তবায়নে, c'কেবল বলা হয় c

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

-3 বাইট লাইকোনি ধন্যবাদ


বাঁধতে কোনও প্যাটার্ন গার্ড ব্যবহার cকরে 3 বাইট সাশ্রয় হয়: অনলাইনে চেষ্টা করে দেখুন!
লাইকনি

@ লাইকনি ওহ, আমি সেই কৌশলটি জানতাম না। ধন্যবাদ!
সাচচান


2

আর , 126 বাইট

function(a,b,g=function(x,y)ifelse(o<-x%%y,g(y,o),y),l=a*b/g(a,b))matrix(c(C<-(1:l)[!l%%1:l],D<-l/C),,2)[g(C,D)<2&!a%%C+b%%D,]

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

এটি অন্য আর উত্তরের চেয়ে মানগুলি খুঁজে পেতে আলাদা (এবং দৃশ্যত কম গোলমুখে) দৃষ্টিভঙ্গি নেয় ।

ব্যাখ্যা:

function(a,b){
 G <- function(x,y)ifelse(o<-x%%y,G(y,o),y) #gcd function, vectorized for x,y
 l <- a*b/g(a,b)                            #lcm of a,b
 C <- (1:l)[!l%%1:l]                        #divisors of l
 D <- l/C                                   #l/C is the other half of the pair
 rel_prime <- G(C, D) < 2                   #pairs where C,D are relatively prime, lol, GCD
 a_div <- !a%%C                             #divisors of a
 b_div <- !b%%D                             #divisors of b
 C <- C[rel_prime & a_div & b_div]
 D <- D[rel_prime & a_div & b_div]          #filter out the bad pairs
 matrix(c(C,D),,ncol = 2)                   #matrix of pairs, returned
}

আমি সমস্ত সংজ্ঞা ডিফল্ট আর্গুমেন্ট হিসাবে shoehorn এবং গল্ফতা জন্য এক লাইনে সমস্ত গণনা না করি।



2

হাস্কেল , 91 74 বাইট

a!b=[(x,y)|x<-[1..a],y<-[1..b],rem a x+rem b y+gcd x y<2,lcm a b==lcm x y]

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

সংরক্ষিত 17 Laikoni ধন্যবাদ বাইট


1
u*v`div`gcd u vএকটি বাইট সংরক্ষণ করে।
লিন

অন্তর্নির্মিত lcmফাংশনটি ব্যবহার না করার কোনও কারণ আছে কি ?
লাইকনি

এছাড়াও rem a x+rem b y+gcd x y<2কাজ করা উচিত।
লাইকনি

@ লাইকোনি একটি খুব ভাল কারণ: আমি এমনকি বিল্টিনের lcmঅস্তিত্ব জানতাম না । rem a x+rem b y+gcd x y<2কাজ করে, এবং আমি যদি অবাক হয় rem a x+rem b y+gcd x y+lcm a b-lcm x y<2 কাজ করে। নেই হয়তো একটি (গাণিতিক) নিশ্চয়তা lcm a b>=lcm x y
jferard

1
প্রকৃতপক্ষে, lcm a b>=lcm x yকারণ ১ x=x1*...*xi(প্রধান পচন) y=y1*...yj, lcm x y=z1*...*zkযেখানে z1,...,zkসাধারণ x1,...,xiএবং y1,...,yj। 2. a=u1*...*um*x1*...*xi(মৌলিক পচানি), b=v1*...vn*y1*...yj, lcm a b=t1*...*tlযেখানে t1,...,tlসাধারণ ব্যাপার ছিল u1*...*um*x1*...*xiএবং v1*...vn*y1*...yj। এটি সুস্পষ্ট যে t1,...,tlরয়েছে z1,...,zk, এইভাবে lcm a b>=lcm x y। তবে শর্তটি যোগফল হিসাবে লেখার জন্য এটি কার্যকর নয়।
jferard


1

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

lambda a,b:[[c,d]for c in range(1,-~a)for d in range(1,-~b)if((gcd(c,d)<2)*a*b/gcd(a,b)==c*d/gcd(c,d))>a%c+b%d]
from math import*

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা স্যুট চেষ্টা করুন।

নেস্টেড তালিকার আকারে সমস্ত সম্ভাব্য সংমিশ্রণগুলি আউটপুট করে।


3
আপনি এবং আপনার বিটওয়াস স্টাফ ... -~aএবং -~bকেবল পাঠযোগ্যতার জন্য a+1এবং পুনরায় লেখা যেতে পারে b+1: পি
স্টিফেন

1
@Stephen যেহেতু আপনি দেখতে পারেন, আমি বিশেষজ্ঞ কিংকর্তব্যবিমূঢ়তা
জনাব Xcoder

আমার সদ্য যুক্ত হওয়া দ্বিতীয় টেস্টকেসের জন্য কাজ করে না।
লিকি নুন

পুনঃটুইট করেছেন গল্ফের বৈধতা পরীক্ষা করার সময় নেই time
মিঃ এক্সকোডার

1

জেলি ,  19 15  14 বাইট

লিকি নুন থেকে পয়েন্টার সহ -4 (অন্তর্নির্মিত বিভাজক ব্যবহার করুন)

আমি প্রায় 100% নিশ্চিত যে এটি আসলে এটি করার উপায় নয়, তবে এখানে প্রথম প্রচেষ্টা রয়েছে।
আসুন দেখি সাত বা আটটি বাইটার দিয়ে কে এটি ছাড়িয়ে যায়!
হ্যাঁ ... ব্যাখ্যা সহ লিনের উত্তর দেখুন !

g/־l/
ÆDp/ÇÐṂ

একটি সংঘবদ্ধ লিঙ্ক দুটি সংখ্যার একটি তালিকা নিয়েছে এবং সম্ভাবনার তালিকার একটি তালিকা ফেরত দেয় returning

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

কিভাবে?

g/־l/  - Link: gcd divided by lcm: list [x, y]
g/      - reduce by gcd = gcd(x, y)
   æl/  - reduce by lcm = lcm(x,y)
  ÷     - divide

ÆDp/ÇÐṂ - Main link: list [a, b]    e.g. [160, 90]
ÆD      - divisors (vectorises)          [[1,2,4,5,8,10,16,20,32,40,80,160],[1,2,3,5,6,9,10,15,18,30,45,90]]
  p/    - reduce by Cartesian product    [[1,1],[1,2],...,[1,90],[2,1],[2,2],...,[2,90],....,[160,90]]
     ÐṂ - entries for which this is minimal:
    Ç   -   call the last link (1) as a monad

আসুন দেখি সাত বা আটটি বাইটার দিয়ে কে এটি ছাড়িয়ে যায়! - এমনটি ভাববেন না ...
মিঃ এক্সকোডার

তুমি ছয়টি ভাবি? ... পাঁচ ?!
জোনাথন অ্যালান

: পি না ... আমি 13-15
ডলারেরও

বিল্ট ইন বিভাজক?
লিকি নুন

হ্যাঁ ÆDতবে (শ্রুগ) মস্তিষ্ক স্পষ্টতই গিয়ারে নেই ...
জোনাথন অ্যালান

1

পার্ল 6 , 72 বাইট

{([X] map {grep $_%%*,1..$_},@^a).grep:{([lcm] @a)==([lcm] $_)==[*] $_}}

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

একটি তালিকা নেয় (ক, খ)। সমস্ত সম্ভাব্য তালিকার একটি তালিকা ফেরত দেয় (সি, ডি)।

ব্যাখ্যা:

-> @ab {
    # Generate all pairs (c, d)
    ([X]
         # where c divides a and d divides b.
         map { grep $_%%*, 1..$_ }, @ab)
    # Only keep pairs with lcm(a, b) = lcm(c, d) and lcm(c, d) = c * d.
    # The latter implies gcd(c, d) = 1.
    .grep: { ([lcm] @ab) == ([lcm] $_) == [*] $_ }
}


1

পাইথন 2 + সিম্পি , 148 বাইট

from sympy import*
a,b=input()
c=d=z=1
while(a/c*c+b/d*d<a+b)+gcd(c,d)-1+(lcm(c,d)!=lcm(a,b)):E=c==d==z;Q=c==z;d=+E or Q+d;c=+Q or-~c;z+=E
print c,d

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

-1 জনাথন ফ্রেচকে ধন্যবাদ

এই উত্তরটি পাইথন 2 তে (পাইথন 3 নয়) ব্যবহার করে sympy.gcdএবং sympy.lcmপরিবর্তে math.gcdএবং math.lcmযা কেবল পাইথন 3 এ উপলব্ধ And এবং হ্যাঁ, এটি নিষ্ঠুর শক্তি :)


গল্ফিং চলছে ...
এরিক আউটগলফার

আপনি সংজ্ঞা দ্বারা একটি বাইট সংরক্ষণ করতে সক্ষম হতে পারে Q=c==z;যখন লুপ শুরুতে (+7 বাইট) এবং প্রতিস্থাপন or(c==z)+dসঙ্গে or Q+d(-4 বাইট) এবং c=+(c==z)orসঙ্গে c=+Q or(-4 বাইট)। ( টিআইও )
জনাথন ফ্রেচ

ঠিক যেমন একটি প্রশ্ন, আপনি +অপারেটরটি ব্যবহার করছেন d=+Eবা c=+(c==z)কোনও বুলিয়ানকে পূর্ণসংখ্যায় রূপান্তর করতে?
জনাথন ফ্রেচ

@JonathanFrech হ্যাঁ, আমি, am যেহেতু আপনি ব্যবহার করতে পারবেন না Trueএবং Falseপরিবর্তে 1এবং 0sympy হবে।
এরিক আউটগলফার

ভ্যানিলার +...কোনও ব্যবহার আছে যেখানে আমি এটিই প্রথম দেখেছি ।
জোনাথন ফ্রেচ

1

জেলি , 13 বাইট

Ụ€’×
ÆEz0ÇZÆẸ

এটি অনলাইন চেষ্টা করুন! আমার প্রথম জেলি উত্তর! সম্পাদনা করুন: ÆEz0µỤ€’×µZÆẸ13 বাইটের জন্যও কাজ করে। ব্যাখ্যা:

ÆE              Get prime factor exponents of both values (vectorises)
  z0            Zip but fill the shorter array with 0
    µ           New monadic link
     Ụ€         Grade up each pair (1-indexed)
       ’        Convert to 0-indexing (vectorises)
        ×       Multiply each pair by its grade (vectorises)
         µ      New monadic link
          Z     Zip back into separate lists of prime factor exponents
           ÆẸ   Turn prime exponent lists back into values (vectorises)

1

পারি / জিপি, 86 বাইট

লিন তার উত্তরে যা বলেছেন এটি এটি করে:

f(a,b)=forprime(p=2,a*b,v=valuation(a,p);w=valuation(b,p);if(w<v,b/=p^w,a/=p^v));[a,b]

আমি যদি f(a,b)=অংশটি গণনা না করি তবে এটি 79 বাইট।


1

05 এ বি 1 ই , 32 26 24 22 20 19 বাইট

Ó0ζεD`›0sǝ}øεā<ØsmP

এটি অনলাইন চেষ্টা করুন! এই ভাষায় কীভাবে লিখবেন সে সম্পর্কে আমার এখনও ধারণা নেই, তবে কমপক্ষে এটি একটি নিষ্ঠুর শক্তি অ্যালগরিদম নয়। ব্যাখ্যা:

Ó                       Get exponents of prime factors (vectorised)
 0ζ                     Zip, filling with 0
   ε      }             For each prime
    D`                  Extract the pair of exponents
      ›0sǝ              Overwrite the smaller with 0
           ø            Zip back into two lists of prime exponents
            ε           For each list (} implied)
             ā<Ø        Get a list of primes
                sm      Raise each prime to the exponent
                  P     Take the product

এটা কি করছে?
লিন

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