ওলস্টেনহোলমের উপপাদ্য যাচাই করুন


14

সংজ্ঞা

ওলস্টেনহোলেমের উপপাদ্য বলে যে:

ওলস্টেনহোলমের উপপাদ্য

যেখানে aএবং bধনাত্মক পূর্ণসংখ্যা এবং pএটি প্রধান এবং বড় কন্ঠগুলি হ'ল দ্বিপদী সহগ

কার্য

যে যাচাই করতে, আপনি তিনটি ইনপুট দেওয়া হবে: a, b, p, যেখানে aএবং bধনাত্মক পূর্ণসংখ্যা এবং pমৌলিক নয়।

কম্পিউট:

ওলস্টেনহোলমের উপপাদ্যের যাচাইকরণ

যেখানে aএবং bধনাত্মক পূর্ণসংখ্যা এবং pএটি প্রধান এবং প্রথম বন্ধনী হ'ল দ্বিপদী সহগ

চশমা

থেকে:

সংযুক্তকারিতা

যেখানে এবং প্রথম বন্ধনী হ'ল দ্বিপদী সহগ

আপনি ধরে নিতে পারেন 2b <= a

Testcases

a b p  output
6 2 5  240360
3 1 13 3697053
7 3 13 37403621741662802118325

2
আমি মনে করি আউটপুটগুলি .0শেষের দিকে থাকা উচিত , সত্যিই এটি দেখানোর জন্য যে বিভাগটি থেকে কোনও অবশিষ্ট নেই।
এল'েন্ডিয়া স্টারম্যান

3
@ এল'েন্দিয়া স্টারম্যান আসুন।
লিকি নুন

1
হায় [240360](Singleton অ্যারে) একটি গ্রহণযোগ্য আউটপুট ফরম্যাট হবে?
ডেনিস

1
আমি মনে করি না যে এখানে একটি আছে, তাই আমি জিজ্ঞাসা করছি।
ডেনিস

2
@ ডেনিস তারপর একটি তৈরি করুন।
ফুটো নুন

উত্তর:


5

হাস্কেল, 73 71 বাইট

পুনরাবৃত্তি হওয়ার কারণে, এই বাস্তবায়নটি খুব ধীর। দুর্ভাগ্যবশত দ্বিপদ সহগ আমার সংজ্ঞা হিসাবে একই দৈর্ঘ্য import Math.Combinatorics.Exact.Binomial

n#k|k<1||k>=n=1|1>0=(n-1)#(k-1)+(n-1)#k --binomial coefficient
f a b p=div((a*p)#(b*p)-a#b)p^3       --given formula

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

g a b p=div((a*p)#(b*p)-a#b)p^3
n+1#k|k<1||k>n=1|1>0=n#(k-1)+n#k

5
হাস্কেল 98 সংস্করণটি কি এখনও একটি বৈধ জমা দেওয়া উচিত নয়?
মাইকেল ক্লেইন

4

জেলি , 12 11 10 বাইট

ż×c/I÷S÷²}

আশা a, b এবং pকমান্ড লাইন আর্গুমেন্ট হিসাবে।

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

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

ż×c/I÷S÷²}  Main link. Left argument: a, b. Right argument: p

 ×          Multiply; yield [pa, pb].
ż           Zipwith; yield [[a, pa], [b, pb]].
  c/        Reduce columns by combinations, yielding [aCb, (pa)C(pb)].
    I       Increments; yield [(pa)C(pb) - aCb].
     ÷      Divide; yield [((pa)C(pb) - aCb) ÷ p].
      S     Sum; yield ((pa)C(pb) - aCb) ÷ p.
        ²}  Square right; yield p².
       ÷    Divide; yield  ((pa)C(pb) - aCb) ÷ p³.

4

পাইথন 2, 114 109 85 71 বাইট

একটি সহজ বাস্তবায়ন। গল্ফিং পরামর্শ স্বাগত জানাই।

সম্পাদনা করুন: -২৯ বাইট ধন্যবাদ লিকি নুনকে এবং -১৪ বাইট ধন্যবাদ ডেনিসকে।

lambda a,b,p,f=lambda n,m:m<1or f(n-1,m-1)*n/m:(f(a*p,b*p)-f(a,b))/p**3

ডেনিসকে ধন্যবাদ সহ একটি সহজ, একই দৈর্ঘ্যের বিকল্প হ'ল

f=lambda n,m:m<1or f(n-1,m-1)*n/m
lambda a,b,p:(f(a*p,b*p)-f(a,b))/p**3

এখানে একটি গল্ফ ফ্যাক্টরিয়াল ল্যাম্বদা রয়েছে
ননলাইনারফ্রুট

3

05 এ বি 1 , 11 বাইট

হিসাবে ইনপুট নেয়:

[a, b]
p

কোড:

*`c¹`c-²3m÷

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


আপনি কি গল্ফ ডেনিসকে আউট করেছিলেন?
লিকি নুন

9
আমি যদি ডেনিসের জুতোতে থাকি তবে আমি মনে করি আমি এই সমস্ত "আউটগল্ফ ডেনিস" মন্তব্যে কিছুটা ক্লান্ত হয়ে পড়েছি ...
লুইস মেন্ডো

7
@ লুইস মেন্ডো আমি নিয়মিতভাবে তাদের পাকাপাকি করব না বা করব না।
ডেনিস

2
এবং
হিঃ

3

আর, 50 48 বাইট

function(a,b,p)(choose(a*p,b*p)-choose(a,b))/p^3

যতটা সহজ হতে পারে ... 2 বাইট সংরক্ষণের জন্য @ নিলকে ধন্যবাদ


1
এই স্পেসগুলির কতটি প্রয়োজনীয়?
নিল

42 পুনঃনামকরনের দ্বারা বাইট chooseএবং ব্যবহার করে pryr::fফাংশন নির্ধারণ করতে: B=choose;pryr::f((B(a*p,b*p)-B(a,b))/p^3)
rturnbull

2

এমএটিএল , 13 বাইট

y*hZ}Xnd2G3^/

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

সংখ্যাগত নির্ভুলতার কারণে শেষ পরীক্ষার কেসটি একটি সঠিক পূর্ণসংখ্যা উত্পাদন করে না। এমএটিএল এর ডিফল্ট ডেটা টাইপ (double ) কেবলমাত্র সঠিক পূর্ণসংখ্যাগুলি পরিচালনা করতে পারে 2^53

ব্যাখ্যা

y   % Implicitly input [a; b] (col vector) and p (number). Push another copy of [a; b]
    %   Stack: [a; b], p, [a; b]
*   % Multiply the top two elements from the stack
    %   Stack: [a; b], [a*p; b*p]
h   % Concatenate horizontally
    %   Stack: [a, a*p; b, b*p]
Z}  % Split along first dimension
    %   Stack: [a, a*p], [b, b*p]
Xn  % Vectorize nchoosek
    %   Stack: [nchoosek(a,b), nchoosek(a*p,b*p)]
d   % Consecutive differences of array
    %   Stack: nchoosek(a,b)-nchoosek(a*p,b*p)
2G  % Push second input again
    %   Stack: nchoosek(a,b)-nchoosek(a*p,b*p), p
3^  % Raise to third power
    %   Stack: nchoosek(a,b)-nchoosek(a*p,b*p), p^3
/   % Divide top two elements from the stack
    %   Stack: (nchoosek(a,b)-nchoosek(a*p,b*p))/p^3
    % Implicitly display

2

জে, 17 বাইট

(!/@:*-!/@[)%]^3:

ব্যবহার

(b,a) ( (!/@:*-!/@[)%]^3: ) p

উদাহরণ স্বরূপ:

   2 6 ( (!/@:*-!/@[)%]^3: ) 5
240360

এটি এখন পর্যন্ত সূত্রটির প্রত্যক্ষ বাস্তবায়ন।

দ্রষ্টব্য : তৃতীয় টেস্টকেস ইনপুট নম্বরগুলি অবশ্যই বর্ধিত হিসাবে সংজ্ঞায়িত করা উচিত (বড় পাটিগণিত পরিচালনা করতে):

   3x 7x ( (!/@:*-!/@[)%]^3: ) 13x
37403621741662802118325

2

ব্র্যাচল্যাগ , 52 বাইট

tT;T P&t^₃D&h↰₁S&h;Pz×₎ᵐ↰₁;S-;D/
hḟF&⟨{-ḟ}×{tḟ}⟩;F↻/

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

ইনপুট গ্রহণ করে [[a, b], p]

% Predicate 1 - Given [n, r], return binomial(n, r)
hḟF              % Compute n!, set as F
&⟨               % Fork:
  {-ḟ}           % (n - r)!
  ×              % times
  {tḟ}           % r!
⟩                
;F↻              % Prepend n! to that
/                % Divide n! by the product and return

% Predicate 0 (Main)
tT;T P           % Set P to the array [p, p] 
&t^₃D            % Set D as p^3
&h↰₁S            % Call predicate 1 on [a, b], 
                 %  set S as the result binomial(a, b)
&h;Pz×₎ᵐ         % Form array [ap, bp]
↰₁               % Call predicate 1 on that to get binomial(ap, bp)
;S-              % Get binomial(ap, bp) - binomial(a, b)
;D/              % Divide that by the denominator term p^3
                 % Implicit output

1

পাইপথন 3 সাইকপাই , 72 বাইট সহ

from scipy.special import*
lambda a,b,p:(binom(a*p,b*p)-binom(a,b))/p**3

একটি বেনামী ফাংশন যা যুক্তির মাধ্যমে ইনপুট নেয় এবং ফলাফলটি দেয়।

এখানে খুব একটা চলছে না; এটি পছন্দসই গণনার সরাসরি বাস্তবায়ন।

আইডিয়নে এটি ব্যবহার করে দেখুন (ফলাফলটি শেষ পরীক্ষার ক্ষেত্রে সূচকীয় স্বরলিপিতে ফিরে আসে)


1

নিম , 85 82 75 59 বাইট

import math,future
(a,b,p)=>(binom(a*p,b*p)-binom(a,b))/p^3

এটি একটি বেনাম প্রক্রিয়া; এটি ব্যবহার করার জন্য, এটি অন্য পদ্ধতির পক্ষে যুক্তি হিসাবে পাস করতে হবে, যা এটি মুদ্রণ করে। পরীক্ষার জন্য ব্যবহার করা যেতে পারে এমন একটি সম্পূর্ণ প্রোগ্রাম নীচে দেওয়া হয়েছে

import math,future
proc test(x: (int, int, int) -> float) =
 echo x(3, 1, 13) # substitute in your input or read from STDIN
test((a,b,p)=>(binom(a*p,b*p)-binom(a,b))/p^3)

নিমের mathমডিউলটির binomপ্রকোপটি তার দুটি আর্গুমেন্টের দ্বিপদী সহগকে গণনা করে।



0

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

(a,b,p,c=(a,b)=>a==b|!b||c(--a,b)+c(a,--b))=>(c(a*p,b*p)-c(a,b))/p/p/p

ES7 ( /p**3পরিবর্তে /p/p/p) ব্যবহার করে 1 বাইট সংরক্ষণ করুন ।



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