ফাইবোনোমিয়াল সহগের গণনা করুন


11

পটভূমি

ফিবোনাচি ক্রম হিসাবে সংজ্ঞায়িত করা হয়

f(1) = 1
f(2) = 1
f(n) = f(n-1) + f(n-2)

ফিবোনোরিয়াল, ফ্যাক্টরিয়াল এর অনুরূপ, প্রথম এন ফিবোনাচি সংখ্যার গুণফল।

g(n) = f(1) * f(2) * ... * f(n-1) * f(n)

দ্বিপদী সহগের অনুরূপ ফিবোনোমিয়াল সহগ হিসাবে সংজ্ঞায়িত করা হয়

a(n, 0) = 1
a(n, k) = g(n) / ( g(n-k) * g(k) )
        = f(n) * f(n-1) * ... * f(n-k+1) / ( f(1) * f(2) * ... * f(k) )

কার্য

আপনার লক্ষ্যটি হ'ল দুটি অ-নেতিবাচক পূর্ণসংখ্যা n এবং k দিয়ে kn দিয়ে ফিবোনোমিয়াল সহগের গণনা করার জন্য একটি ফাংশন বা প্রোগ্রাম তৈরি করা ।

পরীক্ষার কেস

a(0, 0) = 1
a(1, 1) = 1
a(2, 0) = 1
a(3, 2) = 2
a(8, 3) = 1092
a(11, 5) = 1514513
a(22, 7) = 7158243695757340957617
a(25, 3) = 49845401197200
a(50, 2) = 97905340104793732225
a(100, 1) = 354224848179261915075

বিধি

  • এটি তাই সংক্ষিপ্ততম কোড জিততে পারে।
  • বিল্টিনগুলি অনুমোদিত।

সম্পর্কিত


প্রয়োজনে, এখানে একটি ওয়েবপৃষ্ঠা রয়েছে যা 1335ফিবোনোমিয়াল সহগ ক্রমের প্রথম মানগুলিকে তালিকাভুক্ত করে ।
আর কাপ,

হয় a(50, 2)পরীক্ষা ক্ষেত্রে একটি নেতৃস্থানীয় অনুপস্থিত 9?
জো

@ সিরবিডেনএক্সভিআই ওহ হ্যাঁ, আপনি ঠিক বলেছেন আমি একটি সংখ্যাও মিস করেছি।
মাইল

উত্তর:


1

জেলি , 16 বাইট

0+⁸С1ḊP
;_/Ç€:/

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

ফিবোনাচি-ওরিয়াল সহায়ক লিঙ্কটির জন্য ডেনিসকে ক্রেডিট ।

;_/Ç€:/     Main chain,  argument: [n,r]
 _/         Find n-r
;           Attach it to original: [n,r,n-r]
   ǀ       Apply helper link to each element, yielding [g(n),g(r),g(n-r)]
     :/     Reduce by integer division, yielding g(n)//g(r)//g(n-r)

0+⁸С1ḊP    Helper link, argument: n
0+⁸С1ḊP    Somehow return the n-th Fibonacci-orial.

4

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

l=0:scanl(+)1l;a%0=1;a%b=(a-1)%(b-1)*l!!a/l!!b

আউটপুটগুলি ভাসমান। অসীম ফিবোনাচি তালিকা তৈরি করে। তারপরে, ফিবোনাচি তালিকা থেকে উপাদানগুলি দ্বি দ্বিপদী পুনরুদ্ধার, গুণ এবং ভাগ করে দেয়।


4

পাইথন 67 বাইট

f=lambda n,a=1,b=1:n<1or a*f(n-1,b,a+b)
lambda n,k:f(n)/f(k)/f(n-k)

কল করে কল করুন a(n,k)। @ ডেনিস ফাইবোনোরাল উত্তর (এটি অনুমোদিত?) এবং অন্যথায় প্রশ্নের সরাসরি প্রয়োগ বাস্তবায়ন ব্যবহার করে।


সমস্ত ব্যবহারকারীর সামগ্রীটি সিসি-বাই-এসএ এর আওতায় লাইসেন্সযুক্ত, সুতরাং যতক্ষণ আপনি এ্যাট্রিবিউশন সরবরাহ করবেন ততক্ষণ আপনি অন্যান্য উত্তর থেকে কোডটি পুনরায় ব্যবহার করতে পারবেন। আপনি আপনার দ্বিতীয় ল্যাম্বডাকে সংক্ষিপ্ত করতে পারেন lambda n,k:f(n)/f(k)/f(n-k); নামকরণ এটি প্রয়োজন হয় না।
ডেনিস

3

হাস্কেল, 77 57 55 52 50 বাইট

প্রথম লাইনটি মূলত ফিবোনাচি ফাংশন বা সিকোয়েন্স চ্যালেঞ্জ থেকে আসছে এবং এটি @ অ্যানন লিখেছিলেন।

দ্বিতীয় পংক্তিটি ক্রিশ্চিয়ানসিভার্স দ্বারা ফিবোনাচি-ওরিয়াল চ্যালেঞ্জে যুক্ত করা হয়েছিল।

এখন আমি তৃতীয় লাইন যুক্ত। এই চ্যালেঞ্জগুলি আরও কত এগিয়ে যাবে? =)

f=1:scanl(+)1f
g=(scanl(*)1f!!)
n#k=g n/g(n-k)/g k

Xnor 5 বাইটের জন্য ধন্যবাদ!


আপনি কি /তার চেয়ে কি করতে পারেন div?
xnor

হুঁ হ্যাঁ, তবে এটি ভাসমান পয়েন্ট সংখ্যায় শেষ হবে।
flawr

ওহ, যে আসলে অননুমোদিত না, ধন্যবাদ =)
flawr

পেরেনগুলি এড়ানোর জন্য আপনি সম্ভবত দু'বার ভাগ করতে পারেন।
এক্সনোর

1
এখন আমাদের কাছে এটি রয়েছে, এর পরের জিনিসটি ফাইবোনোমিয়াল ট্রান্সফর্ম হতে পারে ;-)
খ্রিস্টান

3

সি, 206 বাইট:

#include <inttypes.h>
uint64_t F(x){return x<1 ? 0:x==1 ? 1:F(x-1)+F(x-2);}uint64_t G(H,B){uint64_t P=1;for(B=3;B<=H;B++)P*=F(B);return P;}main(U,Y){scanf("%d %d",&U,&Y);printf("%llu\n",G(U)/(G(U-Y)*G(Y)));}

কার্যকর হওয়ার পরে, ইনপুট হিসাবে 2 স্পেস বিভাজিত পূর্ণসংখ্যার জন্য জিজ্ঞাসা করে। #includeপ্রাক প্রসেসর হয় প্রয়োজনীয় , এটা ছাড়া হিসেবে uint_64একটি বৈধ প্রকার, এবং ব্যবহার করা হয় মোটামুটি বড় আউটপুট এই কাজটি করতে শুধুমাত্র অন্যান্য উপায় নয় unsigned long longউভয় বিনিময়ে ধরনের F(ফিবানচি) এবং G(Fibonorial) ফাংশন, যা অনেক লম্বা শুধু চেয়ে <inttypes.h>এবং 3 uint64_tধরণের ঘোষণা ব্যবহার সহ । যাইহোক, এমনকি যে সঙ্গে, এটা ইনপুট মান এ সঠিকভাবে কাজ স্টপ 14 1(ব্যবহার দ্বারা নিশ্চিত করা এই , যা তালিকা প্রথম 1325Fibonomial সহগ ক্রমানুসারে মান), সম্ভবত কারণ সংখ্যার ফিবানচি এবং / অথবা Fibnorial উপস্থাপনা 15এবং উপরোক্ত ওভারফ্লো 64-বিট পূর্ণসংখ্যা টাইপ ব্যবহৃত।

এটি অনলাইন! (Ideone)


সম্ভবত 15 টি উপচে পড়া ফিবোনোরাল থেকেuint_64
মাইল

3

চেডার , 75 64 বাইট

a->b->(g->g((a-b+1)|>a)/g(1|>b))(n->n.map(Math.fib).reduce((*)))

ব্যবহার

cheddar> var f = a->b->(g->g((a-b+1)|>a)/g(1|>b))(n->n.map(Math.fib).reduce((*)))
cheddar> f(11)(5)
1514513

2

এমএটিএল , 25 23 বাইট

1ti2-:"yy+]vtPi:)w5M)/p

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

ব্যাখ্যা

1t      % Push 1 twice
i2-:    % Take input n. Generate vector [1 2 ... n-2]
"       % Repeat n-2 times
  yy    %   Push the top two elements again
  +     %   Add them
]       % End
v       % Concatenate into column vector of first n Fibonacci numbers
tP      % Duplicate and reverse
i:      % Take input k. Generate vector [1 2 ... k]
)       % Apply index to get last k Fibonacci numbers
w       % Swap to move vector of first n Fibonacci numbers to top
5M      % Push [1 2 ... k] again
)       % Apply index to get first k Fibonacci numbers
/       % Divide element-wise
p       % Product of vector. Implicitly display

2

আর, 120 বাইট

আরও কিছু গল্ফিং সম্ভবত সম্ভব, তাই মন্তব্য অবশ্যই স্বাগত!
আমি কোডটির শুরুতে ফিবোনাচি-ওরিয়াল প্রশ্নের উত্তরটি ব্যবহার করেছি :

A=function(n,k){p=(1+sqrt(5))/2;f=function(N){x=1;for(n in 1:N){x=prod(x,(p^n-(-1/p)^n)/sqrt(5))};x};f(n)/(f(k)*f(n-k))}

অসমাপ্ত:

A=function(n,k){
p=(1+sqrt(5))/2
    f=function(N){
        x=1
        for(n in 1:N){
           x=prod(x,(p^n-(-1/p)^n)/sqrt(5))
                     }
        x
        }

f(n)/(f(k)*f(n-k))
}

2

জাভা: 304 260 257

আমি স্মৃতি ফাংশনটি কিছুটা কমপ্যাক্ট করে এবং f(n)সম্পূর্ণ অপসারণ করে সরাসরি অ্যারে অ্যাক্সেসের মাধ্যমে প্রতিস্থাপন করে কিছু বাইট সংরক্ষণ করেছি ।

BigInteger[]c;BigInteger a(int n,int k){m(n);return g(n).divide(g(n-k)).divide(g(k));}BigInteger g(int n){return n<3?BigInteger.ONE:g(n-1).multiply(c[n-1]);}void m(int n){c=new BigInteger[n];for(int i=0;i<n;++i)c[i]=(i<2)?BigInteger.ONE:c[i-2].add(c[i-1]);}

দুর্ভাগ্যক্রমে, অতিরিক্ত BigIntegerপ্রবাহের কারণে প্রয়োজনীয় এবং আমাকে স্মৃতি যুক্ত করতে হয়েছিল। এমনকি একটি প্রজন্মের 6 আই 7, এটি গ্রহণ ছিল পথ অত্যন্ত দীর্ঘ বৃহৎ ইনপুট রেখে চালাতে হবে।

বয়লারপ্লেট classএবং mainকোড সহ অবহেলিত :

import java.math.BigInteger;

public class ComputeTheFibonomialCoefficient {

  public static void main(final String[] args) {
    // @formatter:off
    String[][] testData = new String[][] {
      { "0", "0", "1" },
      { "1", "1", "1" },
      { "2", "0", "1" },
      { "3", "2", "2" },
      { "8", "3", "1092" },
      { "11", "5", "1514513" },
      { "22", "7", "7158243695757340957617" },
      { "25", "3", "49845401197200" },
      { "50", "2", "97905340104793732225" },
      { "100", "1", "354224848179261915075" }
    };
    // @formatter:on

    for (String[] data : testData) {
      System.out.println("a(" + data[0] + ", " + data[1] + ")");
      System.out.println("  Expected -> " + data[2]);
      System.out.print("    Actual -> ");
      System.out.println(new ComputeTheFibonomialCoefficient().a(
          Integer.parseInt(data[0]), Integer.parseInt(data[1])));
      System.out.println();
    }
  }

  // Begin golf

  BigInteger[] c;

  BigInteger a(int n, int k) {
    m(n);
    return g(n).divide(g(n - k)).divide(g(k));
  }

  BigInteger g(int n) {
    return n < 3 ? BigInteger.ONE : g(n - 1).multiply(c[n - 1]);
  }

  void m(int n) {
    c = new BigInteger[n];
    for (int i = 0; i < n; ++i)
      c[i] = (i < 2) ? BigInteger.ONE : c[i - 2].add(c[i - 1]);
  }
  // End golf
}

প্রোগ্রাম আউটপুট:

a(0, 0)
  Expected -> 1
    Actual -> 1

a(1, 1)
  Expected -> 1
    Actual -> 1

a(2, 0)
  Expected -> 1
    Actual -> 1

a(3, 2)
  Expected -> 2
    Actual -> 2

a(8, 3)
  Expected -> 1092
    Actual -> 1092

a(11, 5)
  Expected -> 1514513
    Actual -> 1514513

a(22, 7)
  Expected -> 7158243695757340957617
    Actual -> 7158243695757340957617

a(25, 3)
  Expected -> 49845401197200
    Actual -> 49845401197200

a(50, 2)
  Expected -> 97905340104793732225
    Actual -> 97905340104793732225

a(100, 1)
  Expected -> 354224848179261915075
    Actual -> 354224848179261915075



1

ডিসি, 67 বাইট

?skdsn[si1d[sadlarla+zli>b*]sbzli>b*]dsgxsplnlk-lgxsqlklgxlprlqr*/f

একক লাইনে স্পেস-সীমাবদ্ধ দশমিক ধ্রুবক হিসাবে ইনপুট নেওয়া হয়।

এটা আমার ব্যবহার উত্তর থেকে /Fibon(acci-)?orial/প্রশ্ন, যা শেষ ধাপে স্ট্যাক তা বৃদ্ধি পায় সব সংখ্যা, অন্যান্য সংখ্যার প্রয়োজন অন্যত্র সংরক্ষণ করার জন্য যখন অন্যান্য Fibonorials গণনা করা হয়।

?       # Take input from stdin
skdsn   # Store second number in register `k'; store a copy of first number in register `n'
[si1d[sadlarla+zli>b*]sbzli>b*] # Compute Fibonorial of top-of-stack, multiplying
                                #   until stack depth is 1
dsgx    # Store a copy of this function as g and execute it: g(n)
sp      # Store g(n) in register `p'
lnlk-   # Compute n-k
lgx     # Compute g(n-k)
sq      # Store g(n-k) in register `q'
lk lgx  # Compute g(k)
        # Top ---Down--->
lp      #  g(n)    g(k)
r       #  g(k)    g(n)
lq      #  g(n-k)  g(k)    g(n)
r       #  g(k)    g(n-k)  g(n)
*       # (g(k)g(n-k))     g(n)
/       #  g(n)/(g(k)g(n-k))
f       # Dump stack to stdout


1

এক্সিওম 108 বাইট

b(n,k)==(n<=k or k<1=>1;reduce(*,[fibonacci(i) for i in (n-k+1)..n])/reduce(*,[fibonacci(i) for i in 1..k]))

কিছু পরীক্ষা

(34) -> b(0,0),b(1,1),b(2,0),b(3,2),b(8,3),b(11,5),b(22,7)
   Compiling function b with type (NonNegativeInteger,
      NonNegativeInteger) -> Fraction Integer
   Compiling function b with type (PositiveInteger,PositiveInteger) ->
      Fraction Integer
   Compiling function b with type (PositiveInteger,NonNegativeInteger)
       -> Fraction Integer

   (34)  [1,1,1,2,1092,1514513,7158243695757340957617]
                                                 Type: Tuple Fraction Integer
(35) -> b(25,3),b(50,2),b(100,1)

   (35)  [49845401197200,97905340104793732225,354224848179261915075]

প্রকার: টিপল ভগ্নাংশ পূর্ণসংখ্যা


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