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)!)
- Rejestracja:prawie 4 lata
- Ostatnio:ponad 3 lata
- Postów:1

- Rejestracja:prawie 5 lat
- Ostatnio:4 miesiące
- Postów:2420
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!

- Rejestracja:ponad 13 lat
- Ostatnio:prawie 3 lata
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

- Rejestracja:ponad 19 lat
- Ostatnio:2 miesiące
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;
}

- Rejestracja:około 17 lat
- Ostatnio:minuta
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:

- Rejestracja:ponad 20 lat
- Ostatnio:około rok
http://www.luschny.de/math/factorial/FastBinomialFunction.html
albo inaczej, zakres nieograniczony (prawie)
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; }
Wypierdzistyserio, 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 zaaa, ab
i akurat taki kod najczęściej widziałem u matematyków :/Wypierdzisty