Wartość dwumianu Newtona

0

Witam mam takie zadanie , i kompletnie nie mam pojęcia jak się za to zabrać , jeśli miałby ktoś chwilę i dałby rade pomóc to będę wdzięczny
Stosując iteracyjne obliczanie silni, oblicz wartość Dwumianu Newtona(n,k).
Wzór:
(n,k) = n!/(k!*(n-k)!)

2

Czy żeby to obliczyć potrzebujesz najpierw obliczyć silnie (iteracyjnie):

def silnia(n):
   result := 1
   for i := 1 to n do
       result := result * i
   return result;

Tutaj wartość matematyczna n! będzie odpowiadać wywołaniu silnia(n).

A potem jak już masz silnie to możesz obliczyć swój dwumian (gotowca Ci nie podam to to już naprawdę nie wymaga dużego wysiłku). Powodzenia!

0

Dwumian przy pomocy silni mozesz tylko liczyc przy pomocy liczb typu BigInteger (Python ma to wbudowane). Wynika to z faktu ze powyzej liczby 19 konczy sie zakres integera.

Przeczytaj https://4programmers.net/Forum/C_i_C++/193687-program_obliczajacy_wartosc_symbolu_newtona?page=1

2

Masz obliczyć: ((n-k+1)*(n-k+2)*(n-k+3)*...*(n-2)*(n-1)*n)/(2*3*4*...*(k-1)*k)
W sumie dwie proste pętli.

W sumie można nawet na wbudowanych typach obliczać spore wartości:

#include <iostream>
using namespace std;

template<typename T> T GCD(T a,T b)
{
	if((!a)||(!b)) return 1;
	for(T t;b;a=b,b=t) t=a%b;
	return a;
}

template<typename T> void DivGCD(T &a,T &b)
{
	T div=GCD(a,b);
	a/=div;
	b/=div;
}

template<typename T> T multiply(T &value,T mul)
{
	T save=value;
	value*=mul;
	if(value/mul!=save) cerr<<"Error: "<<save<<'*'<<mul<<endl;
}

template<typename T> T newton(T n,T k)
{
	T mul=1,div=1;
	for(T i=1;i<=k;++i)
	{
		T ni=n-k+i,ki=i;
		DivGCD(ni,ki);
		DivGCD(mul,ki);
		DivGCD(div,ni);
		multiply(mul,ni);
		multiply(div,ki);
	}
	return mul/div;
}


int main()
{
   for(int n=7;n<=30;++n)
   {
	   for(int k=5;k<=n-5;++k)
	   {
	      cout<<newton(n,k)<<endl;	
	   }
   }
   return 0;
}
4
Wladek12345 napisał(a):

Witam mam takie zadanie , i kompletnie nie mam pojęcia jak się za to zabrać , jeśli miałby ktoś chwilę i dałby rade pomóc to będę wdzięczny

Stosując iteracyjne obliczanie silni, oblicz wartość Dwumianu Newtona(n,k).
Wzór:
(n,k) = n!/(k!*(n-k)!)

Taka treść zadania, każe się zastanawiać, czy autor wie jak zrobić to lepiej.
Lepiej robi się tak:
{6\choose 3} = 6 / 1 * 5 / 2 * 4 / 3

0

{6\choose 3}  = \frac{2^4 \cdot  3^2 \cdot  5}{(2\cdot 3)\cdot (2\cdot 3)}=<br> \frac{2^4 \cdot  3^2 \cdot  5}{2^2\cdot 3^2}=2^2\cdot 5
http://www.luschny.de/math/factorial/FastBinomialFunction.html

albo inaczej, zakres nieograniczony (prawie)
\log_{10} n!=\sum_{i=1}^{n}\log_{10} i \<br> c = \left \lfloor\log_{10} n!  \right \rfloor, u=10^{\log_{10} n!}-c\<br> n!=u\cdot 10^{c}

jeszcze inaczej

unsigned long binomial (int n, int m) { 
        unsigned long cnm = 1UL; 
        int i, f; 
        if (m*2 >n) 
                m = n-m; 
        for (i=1 ; i <= m; n--, i++) { 
                if ((f=n) % i == 0) 
                        f /= i; 
                else 
                        cnm /= i; 
                cnm *= f; } 
        return cnm; }
0

ja rozumiem że zadanko mocno związane z majzą, ale mimo wszystko może nie piszmy kodu jak matematycy ze zmiennymi

a b c d e f g h...

1 użytkowników online, w tym zalogowanych: 0, gości: 1