Dzielenie dużych liczb.
Ostatnio zmodyfikowano 2015-06-29 00:57
pekfos |
» 2015-06-26 23:18:33 if( n <= 99999999 ) cout << "0";
if( n <= 9999999 ) cout << "0";
if( n <= 999999 ) cout << "0";
if( n <= 99999 ) cout << "0";
if( n <= 9999 ) cout << "0";
if( n <= 999 ) cout << "0";
if( n <= 99 ) cout << "0";
if( n <= 9 ) cout << "0";
|
Poważnie? |
|
Piastlis Temat założony przez niniejszego użytkownika |
» 2015-06-26 23:38:21 Sorki:).To było pisane tak na szybko i jakichś czas temu .Działało więc nie poprawiałem.Kolega darko202 wspomniał o silni więc ja sobie przypomniałem że coś takiego mam.Więc kopiuj-wklej.Jakoś tak się wymsknęło.:) |
|
darko202 |
» 2015-06-27 12:52:56 Sorry, bo chyba już skończyłeś temat ale z rozpęd sprawdziłem algorytm mnożenia i wyszło, że nie jest zbyt wydajny. ta silnia liczy się strasznie długo :(
|
|
Piastlis Temat założony przez niniejszego użytkownika |
» 2015-06-28 23:10:22 Po pierwsze. To nie jest algorytm mnożenia tylko demo reprezentacji danych.O to się pytałeś.Napisałem że po dopracowaniu poświęcam 20 taktów procesora na 9 liczb znaczących wyniku.Policzenie silni z 100000 to 2.4G mnożeń które wykonuje w 20 sekund.I akurat 2.4G ma mój procek.Dlatego wiem że silnia z 1000000 to nie "trwało nie dłużej niż spluniecie ". To więcej niż godzina .Po prostu nie masz pojęcia o czym mówisz.Pokazałem ci wersję która liczy silnię z 100000 w 2 min i 30 sek. Jeżeli potrafisz szybciej to się pochwal. |
|
Elaine |
» 2015-06-29 00:11:54 Ale jakbyś próbował policzyć 1000000!*999999! trochę by to potrwało.I wynik na pewno się nie zmieści na żadnym twardzielu... |
Bez przesady, ta liczba ma tylko 11,131,412 cyfr w zapisie dziesiętnym. Dlatego wiem że silnia z 1000000 to nie "trwało nie dłużej niż spluniecie ". To więcej niż godzina . |
U mnie to niecałe trzy minuty, używając najbardziej naiwnego sposobu liczenia silni, jaki istnieje: module Main (main) where
main :: IO () main = print . length . show . product $ [1 .. 1000000 :: Integer] |
|
Piastlis Temat założony przez niniejszego użytkownika |
» 2015-06-29 00:57:04 Ok.Wiem.Korzystając z liczb pierwszych i szeregów można to zrobić błyskawicznie.Ale akurat nie interesuje mnie liczenie silni tylko wydajne działania podstawowe. +-*/ .Coś wymyśliłem ,może się komuś przyda.Nie jest to algorytm do dzielenia przez dowolną ilość słów tylko przez 2. Powiedzmy że mam 2 liczby zapisane w systemie 1000 które chcę podzielić np: 500 999 : 10 001
Szacuję możliwy wynik na postawie starszych słów:
501:10 = 50 500:11 = 45
Jeżeli wyniki są takie same to mamy wynik.
Teraz obliczam resztę z dzielenia przez mniejszą wartość:
500 999 450 045 ------- 50 954
Jest większa niż mianownik więc powtarzam czynności:
50:11 =4
dodaję do wyniku:
45+4=49
Liczę resztę :
500 999 490 049 ------- 10 950
Nadal jest większa od mianownika więc:
49+1=50
500 999 500 050 ------- 949
Mam wynik : 50 i reszta 949.
|
|
1 « 2 » |