Wartość dwumianu Newtona

Wartość dwumianu Newtona
W1
  • Rejestracja:prawie 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:1
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)!)

99xmarcin
  • Rejestracja:około 5 lat
  • Ostatnio:5 miesięcy
  • Postów:2420
2

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

Kopiuj
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!


Holy sh*t, with every month serenityos.org gets better & better...
edytowany 1x, ostatnio: 99xmarcin
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
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

edytowany 1x, ostatnio: vpiotr
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 7 godzin
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:

Kopiuj
#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;
}

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 3x, ostatnio: _13th_Dragon
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:4 minuty
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


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
Xitami
  • Rejestracja:ponad 20 lat
  • Ostatnio:około rok
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

Kopiuj
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; }
edytowany 3x, ostatnio: Xitami
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 godziny
  • Postów:5132
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...

Zobacz pozostałe 6 komentarzy
WY
Wypierdzisty
Niektórym łatwiej się odnaleźć jeśli patrzą na kod i literki są takie same jak ze wzorów. Wiadomo IDE powinno podpowiedzieć jakie parametry przyjmuje funkcja, wtedy uniknie się niepewności, która zmienna była od czego, ale jeśli to 1:1 jakiś wzór to np. zmiennych wymiarowych x,y,z nie ma sensu jakoś inaczej nazywać. Chodź greckie litery to zależy, często słownie są zapisywane.
WeiXiao
@jarekr000000: serio, jest wiele miejsc w programowaniu gdzie NALEŻY używać krótkich i NIC NIE MÓWIĄCYCH nazw zmiennych name them, Niektórym łatwiej się odnaleźć jeśli patrzą na kod i literki są takie same jak ze wzorów. tu akurat nie chodzi mi o czepianie się wzorków, ale gdy kod to jest alfabet literek, z bonusowymi punktami za aa, ab i akurat taki kod najczęściej widziałem u matematyków :/
WY
Wypierdzisty
@jarekr000000: ale ostrzegaj, że to link do monad, wszedłem nieświadomie
_13th_Dragon
@Wypierdzisty po co ostrzegać, wchodzisz, czytasz, jak się nie czyta to znaczy nie znasz tego języka - proste.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.