Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dzielenie dużych liczb.

Ostatnio zmodyfikowano 2015-06-29 00:57
Autor Wiadomość
pekfos
» 2015-06-26 23:18:33
C/C++
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?
P-134105
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.:)  
P-134107
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 :(


P-134113
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.  
P-134142
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:
Haskell
module Main (main) where

main :: IO ()
main = print . length . show . product $ [1 .. 1000000 :: Integer]
P-134143
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.






 

  
P-134144
1 « 2 »
Poprzednia strona Strona 2 z 2