বাজাউটের পরিচয়


11

পরিচিতি Bézout পরিচয়

দুটি পূর্ণসংখ্যার এ, বি এর জিসিডি হ'ল বৃহত্তম ধনাত্মক পূর্ণসংখ্যা যা উভয়কেই ভাগ করে দেয় কোনও অবশিষ্ট নেই। ইউক্লিডের সম্পত্তি হওয়ায় প্রতিটি পূর্ণসংখ্যক এনকে আরও একটি পূর্ণসংখ্যা এম দ্বারা ভাগ করা যায়:

                                           ইউক্লিডিয়ান বিভাগ

সেখানে ইউ, ভি এর মতো জুড়ি রয়েছে যা আমরা লিখতে পারি:

                                           বাজাউটের পরিচয়

যেহেতু এই জোড়াগুলির সীমাহীন পরিমাণ রয়েছে, তাই আমরা বিশেষ কোনওগুলি খুঁজতে চাই। বাস্তবে ঠিক (এ, বি শূন্য হচ্ছে না) এমন দুটি জোড়া পরিতৃপ্ত হয়

                                           অর্থবোধক (ইউ, ভি)-জোড়াগুলির জন্য সীমাবদ্ধতা


যেমন                                    19 এবং 17 এর সাথে উদাহরণ


চ্যালেঞ্জ

এই চ্যালেঞ্জের লক্ষ্য হ'ল উপরের সীমাবদ্ধতাগুলিকে সন্তুষ্ট করার সহগের (অর্ডারযুক্ত) জোড় (ইউ) দেওয়া জোড় খুঁজে পাওয়া এবং যেখানে আপনাকে অবশ্যই ইতিবাচক হতে হবে। এটি আউটপুটটিকে একটি অনন্য জুটিতে সঙ্কুচিত করে।


ইনপুট

আমরা ধরে নিতে পারি যে ইনপুটটি ইতিবাচক, এছাড়াও এ সবসময় বি (এ> বি) এর চেয়ে বড় হবে।


আউটপুট

আমাদের প্রোগ্রাম / ফাংশনের আউটপুট অবশ্যই চ্যালেঞ্জের মধ্যে নির্দিষ্ট (অর্ডার) জোড় থাকতে হবে।


বিধি

কাউকে বিল্ট-ইন এক্সটেন্ডেড ইউক্লিডিয়ান অ্যালগরিদম ব্যবহার করা উচিত নয় (যেমন ম্যাথমেটিকায় একটি ব্যবহারের অনুমতি রয়েছে GCDতবে তা নয় ExtendedGCD- যা যাইহোক 5,3 এর জন্য ব্যর্থ হবে)।

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

জোড়ার (ইউ, ভি) পাশে কোনও আউটপুট থাকবে না, পিছনে থাকা নতুন লাইনের বা ফাঁকা স্থান অনুমোদিত। (বন্ধনী বা কমাগুলি ভাল)

এটি কোড গল্ফ, সমস্ত স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ এবং সর্বনিম্ন বাইট গণনা সহ প্রোগ্রামটি।


উদাহরণ

(A, B) -> (u, v)
(42, 12) -> (1, -3)
(4096, 84) -> (4, -195)
(5, 3) -> (2, -3)
(1155, 405) -> (20, -57)
(37377, 5204) -> (4365, -31351)
(7792, 7743) -> (7585, -7633)
(38884, 2737) -> (1707, -24251)
(6839, 746) -> (561, -5143)
(41908, 7228) -> (1104, -6401)
(27998, 6461) -> (3, -13)
(23780, 177) -> (20, -2687)
(11235813, 112358) -> (8643, -864301)

উত্তর:


1

এমএটিএল , 37 40 বাইট

ZdXK2Gw/:1G*1GK/t_w2$:XI2G*!+K=2#fIb)

রিলিজ (9.3.1) ব্যবহার করে , যা এই চ্যালেঞ্জের চেয়ে আগের।

এটি একটি নিদারুণ শক্তি পদ্ধতির, তাই এটি বড় ইনপুটগুলির জন্য কাজ না করে।

এটি অনলাইন চেষ্টা করুন! অনলাইন সংকলকটি নতুন রিলিজের উপর ভিত্তি করে তৈরি হয়েছে তবে একই ফলাফল প্রকাশ করে।

ব্যাখ্যা

Zd            % implicitly input A and B. Compute their GCD. Call that C
XK            % copy C to clipboard K
2Gw/:         % vector [1, 2, ..., B/C]
1G*           % multiply that vector by A
1GK/t_w2$:    % vector [-A/C, -A/C+1 ..., A/C]
XI            % copy to clipboard I
2G*           % multiply that vector by B
!+            % all pairwise sums of elements from those vectors
K=2#f         % find row and column indices of sum that equals C
Ib)           % index second vector with column (indexing first vector with
              % row is not needed, because that vector is of the form [1, 2, ...])

7

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

a#b=[(u,-v)|v<-[1..],u<-[1..v],gcd a b==u*a-v*b]!!0

ব্যবহারের উদাহরণ: 27998 # 6461-> (3,-13)

এটি একটি ব্রুট ফোর্স পদ্ধতির যা সমস্ত সংমিশ্রণগুলি খুঁজে পায় uএবং vএটি বৈধ সমাধানগুলি uআদেশিত হয় এবং প্রথমটিকে বেছে নেয়। বড় হয়ে দৌড়াতে এটি কিছুটা সময় নেয় |v|


আমি []!!0ধারণাটি পছন্দ করি =)
flawr

3

পাইথন 3, 101 106 বাইট

সম্পাদনা করুন: ব্রুস_ফোর্ড দ্বারা প্রস্তাবিত কিছু উন্নতি এবং সংশোধন করা হয়েছে ।

একটি উত্তর যা বর্ধিত ইউক্লিডিয়ান অ্যালগরিদম ব্যবহার করে। যদিও এটি জায়গাগুলিতে কিছুটা ছোঁয়াচে, এবং আমি আরও কিছু গল্ফ আশা করি। আমি পূর্ণসংখ্যা বিভাগে বাইট সংরক্ষণ করার জন্য পাইথন 2 এ রূপান্তর করতে পারি ( //তবে) আমি জানি না পাইথন 2 এর %মডিউলাস অপারেটর কীভাবে নেতিবাচক দ্বিতীয় যুক্তির সাথে কাজ করে, যেহেতু আউটপুট সঠিক হওয়ার জন্য এটি গুরুত্বপূর্ণ।

def e(a,b):
 r=b;x=a;s=z=0;t=y=1
 while r:q=x/r;x,r=r,x%r;y,s=s,y-q*s;z,t=t,z-q*t
 return y%(b/x),z%(-a/x)

Ungolfed:

def e(a, b):
    r = b
    x = a    # becomes gcd(a, b)
    s = 0
    y = 1    # the coefficient of a
    t = 1
    z = 0    # the coefficient of b
    while r:
        q = x / r
        x, r = r, x % r
        y, s = s, y - q * s
        z, t = t, z - q * t
    return y % (b / x), z % (-a / x) # modulus in this way so that y is positive and z is negative

একজন অনামী ব্যবহারকারী নির্দেশ করেছেন যে kআপনার অগল্ফড সংস্করণের শেষ লাইনে পরিবর্তনশীল অপরিজ্ঞাত।
জোনাথন ফ্রেচ

@ জোনাথানফ্রেচ আহ, আপনাকে ধন্যবাদ!
শার্লক

1

গণিত, 80 বাইট

f@l_:=Mod@@NestWhile[{Last@#,{1,-Quotient@@(#.l)}.#}&,{{1,0},{0,1}},Last@#.l>0&]

ব্যাখ্যা :

প্রসারিত ইউক্লিডিয়ান অ্যালগরিদম এখানে একটি Nestস্টাইলে ব্যবহৃত হয় । সহগের উপাদানগুলি অ্যারেতে সংরক্ষণ করা হয় সেই পদ্ধতিটি এটি ব্যবহার করা সম্ভব করে Dot

আর একটি সম্ভাব্য উপস্থাপনা হ'ল এটির মতো, কেবল প্রতীকী অভিব্যক্তি ব্যবহার u a - v bকরা {a->19, b->17}। এই জাতীয় উপস্থাপনা ম্যাথমেটিকার বৈশিষ্ট্যটি ব্যবহার করে এবং আকর্ষণীয় তবে এটি বাইটে অনেক বেশি দীর্ঘ।


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

f[{5, 3}]              (* {2, -3} *)
f[{42, 12}]            (* {1, -3} *)
f[{11235813, 112358}]  (* {8643, -864301} *)

1

রুবি, 83 বাইট

আমি মনে করি এই সমাধানটির সূক্ষ্ম সুর ও গল্ফ করার কয়েকটি উপায় রয়েছে তবে আমি এখনও পর্যন্ত এটি পছন্দ করি। সম্ভবত আমি পরের দিকে বর্ধিত ইউক্লিডিয়ান অ্যালগরিদম সমাধান চেষ্টা করব।

->x,y{a=b=0;y.downto(0).map{|u|(-x..0).map{|v|a,b=u,v if u*x+v*y==x.gcd(y)}};p a,b}

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

এই কোডটি নীচে 0 uথেকে একটি লুপ দিয়ে শুরু হয় y, 0 vথেকে -x0 পর্যন্ত অভ্যন্তরীণ লুপ দিয়ে , যার ভিতরে আমরা প্রতিটি uএবং vযদি পরীক্ষা করি u*x+v*y == gcd(x, y)। যেহেতু সেখানে একাধিক ম্যাচ হতে পারে (এটি একটি খুব বিস্তৃত অনুসন্ধান ব্যবহার করে) তাই আমরা 0 থেকে অনেক দূরে শুরু করি যাতে আমরা একাধিক ম্যাচের শেষটি পাই তখন এটিই যেখানে একটি |u|এবং |v|0 এর কাছাকাছি।

def bezout(x,y)
  a=b=0
  y.downto(0).each do |u|
    (-x..0).each do |v|
      if u*x + v*y == x.gcd(y)
        a,b=u,v
      end
    end
  end
  p a,b
end

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