Witam, musze napisac program w C ktory policzy mi ile to jest \(\displaystyle{ \sqrt[1000]{1000!}}\)
Oczywiscie wyliczenie 1000! a potem pierwiastkowanie tego nie wchodzi w gre. Metoda Newtona-Raphsona tez raczej nie, bo o ile dobrze pamietam bylo tam cos z calkami lub pochodnymi (a w C za bardzo calki nie policze).
Slyszalem ze mozna jakies kombinacje z modulo zrobic, ale nie potrafie nic znalesc. Jakby ktos znal jakis algorytm/twierdzenie/cokolwiek to bylbym wdzieczny.
przyblizanie wielkosci duzego pierwiastka z duzej liczby
-
- Użytkownik
- Posty: 7
- Rejestracja: 22 paź 2009, o 22:10
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 1 raz
przyblizanie wielkosci duzego pierwiastka z duzej liczby
Ostatnio zmieniony 23 paź 2009, o 19:40 przez czeslaw, łącznie zmieniany 1 raz.
Powód: Temat umieszczony w złym dziale.
Powód: Temat umieszczony w złym dziale.
- mathX
- Użytkownik
- Posty: 648
- Rejestracja: 1 lis 2008, o 15:54
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 5 razy
- Pomógł: 116 razy
przyblizanie wielkosci duzego pierwiastka z duzej liczby
Może wzór Stirlinga pomoże:
\(\displaystyle{ n! \approx ( \frac{n}{e} )^{n} \sqrt{2\pi n}}\)
I algorytm (z metody stycznych), ale bez całek z tego, co widzę Owszem dalej masz uzasadnienie z pochodnymi, ale tamto jest już mniej istotne.
... go_stopnia
Lepszej metody sobie nie przypominam obecnie.
Pozdrawiam.
\(\displaystyle{ n! \approx ( \frac{n}{e} )^{n} \sqrt{2\pi n}}\)
I algorytm (z metody stycznych), ale bez całek z tego, co widzę Owszem dalej masz uzasadnienie z pochodnymi, ale tamto jest już mniej istotne.
... go_stopnia
Lepszej metody sobie nie przypominam obecnie.
Pozdrawiam.
-
- Użytkownik
- Posty: 7
- Rejestracja: 22 paź 2009, o 22:10
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 1 raz
przyblizanie wielkosci duzego pierwiastka z duzej liczby
ale wzor Stirlinga i tak wykracza poza zakres. Przydalo by sie go jakos rozbic, chociaz nie wiem czy bylo by to do konca poprawne np na cos takiego
\(\displaystyle{ \sqrt[1000]{1000!}= \sqrt[1000]{100!}\cdot\sqrt[1000]{10!}}\)
osobno policzyc te dwa pierwiastki i pomnozyc. Da sie tak?
\(\displaystyle{ \sqrt[1000]{1000!}= \sqrt[1000]{100!}\cdot\sqrt[1000]{10!}}\)
osobno policzyc te dwa pierwiastki i pomnozyc. Da sie tak?
- Mariusz M
- Użytkownik
- Posty: 6903
- Rejestracja: 25 wrz 2007, o 01:03
- Płeć: Mężczyzna
- Lokalizacja: 53°02'N 18°35'E
- Podziękował: 2 razy
- Pomógł: 1246 razy
przyblizanie wielkosci duzego pierwiastka z duzej liczby
Skoro wychodzi poza zakres to przechowuj liczby jako ciąg cyfrnewsted pisze:ale wzor Stirlinga i tak wykracza poza zakres. Przydalo by sie go jakos rozbic, chociaz nie wiem czy bylo by to do konca poprawne np na cos takiego
\(\displaystyle{ \sqrt[1000]{1000!}= \sqrt[1000]{100!}\cdot\sqrt[1000]{10!}}\)
osobno policzyc te dwa pierwiastki i pomnozyc. Da sie tak?
w tablicy znaków z dynamiczną alokacją pamięci
(funkcje malloc i free)
W C++ mógłbyś napisać klasę do obsługi dużych liczb
ponadto mógłbyś przeciążać operatory oprócz pisania metod
Jeżeli chcesz obliczyć to w przybliżeniu to policz logarytm z silni
(pętla for tylko zamiast mnożyć sumujesz) pomnóż przez 0.001
część ułamkową odlogarytmuj
Jeżeli używasz logarytmu naturalnego to przed pomnożeniem zmień podstawę na 10
i do odlogarytmowania użyj funkcji wykładniczej też o podstawie 10
Kod wyglądałby następująco
Kod: Zaznacz cały
#include<stdio.h>
#include<math.h>
#include<conio.h>
int main(){
double x,y,fy;
int i;
clrscr();
for(i=1;i<=1000;i++)
y+=log10(i);
y*=0.001;
fy=y-(int)(y);
x=pow(10,fy);
printf("%.12lfE+%d
",x,(int)(y));
do{
}
while(!kbhit());
return 0;
}