-
Data: 2011-05-25 18:39:56
Temat: Re: porownanie wyniku mnozenia integerow
Od: bartekltg <b...@o...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2011-05-24 20:28, t...@g...SKASUJ-TO.pl pisze:
> witam,
>
> jak sprawdzic czy dla integerow a,b,c,d zachodzi
>
> a*b == c*d
Jak a i b są 32 bitowe, to piszemy ((long long)a)*b i porównujemy.
Jak 64, a maszyna x64, to VS i gcc mają jakieś typy 128bitowe
i podobnie. W strasznym języku ja J mamy duże liczby;)
> Chodzi raczej o to, czy ktos zna zestaw warunkow
> typu mnozenie, dodawanie
> modulo,
Ok, a jak podam rozwiązanie, to co dostane?
Masz porównać ab == cd
porównaj ab == cd (mod p_i)
dla kilku liczb pierwszych, w miarę dużych i takich,
by p^2 mieściło się w zakresie.
Z górką wystarczy 5 takich liczb*)
Jeśli m==n (mod p_i), dla i=1..k
to m==n jeżeli tylko m i n < p_1*p_2*...*p_k
Nazywa się toto Chińskie twierdzenie o resztach.
p_i nie muszą być nawet pierwsze, wystarczy, że są względnie pierwsze.
*)P< sqrt(MAXINT), ale możemy dobrać niewiele mniejsze.
p_1*..*p^5 wyniesie ponad MAXINT^2
Mnożenia a*b wykonujesz mod p: ((a%p)*(b%p))%p
więc nigdy nie wyskoczysz poza zakres.
Wydaje się, że więcej pracy niż przy ((long long)a)*b==((long long)c)*d,
ale za to ładnie skaluje się, liniowo ze względu na ilość czynników
w iloczynie (czego nie można powiedzieć o mnożeniu dużych liczb).
No i jest niezależne od języka, maszynerii i tego, czym tak naprawdę
są te inty.
Ktoś podesłał pomysł rozkładu na czynniki pierwsze. Można pociągnąć
ten pomysł. Policzymy NWD (najwiekszy wspolny dzielnik)
dla wszytkich możliwytch par i będziemy skracać.
x=NWD(a,c);
a=a/x; c=c/x;
i podobnie dla par a:d, b:c, b:d (najpierw skracamy, pozniej
liczymy kolejne NWD)
Po wszystkich skróceniach, jeśli iloczyny były równe, otrzymamy
cztery jedynki.
Algorytm liczący NWD znajdziesz bez problemu, jest prosty i szybki,
a imię jego Euklides.
Chyba trudniej byłoby ze stwierdzeniem, która liczba jest większa.
pozdrawiam
bartekltg
Następne wpisy z tego wątku
- 26.05.11 06:40 Paweł Kierski
- 26.05.11 12:21 Wojciech \"Spook\" Sura
- 26.05.11 13:07 bartekltg
- 26.05.11 21:14 Jędrzej Dudkiewicz
- 03.06.11 14:17 Pawel WQLQS
Najnowsze wątki z tej grupy
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
Najnowsze wątki
- 2024-06-10 wyobrazcie sobie ze
- 2024-06-10 malowanie samochodu
- 2024-06-10 News from Poland
- 2024-06-10 Czy na pewno będą CŁA na chińskie samochody?
- 2024-06-09 Dlaczego w Polsce sie nic nie udaje, na przykładzie niebieskiego lasera a teraz perskowitów
- 2024-06-09 Dlaczego w Polsce sie nic nie udaje, na przykładzie niebieskiego lasera a teraz perskowitów
- 2024-06-09 Wykrywanie przerwy w długim przewodzie zakopanym w ziemi.
- 2024-06-09 Czemu news.chmurka.nwt jest taki wolny?
- 2024-06-11 Funbox 3.0 zakres adresów DHCP
- 2024-06-11 Re: Funbox 3.0 zakres adresów DHCP
- 2024-06-09 Miernik szybkości netu
- 2024-06-11 Panele PV w pionie (prawie).
- 2024-06-11 czy ta grupa żyje?
- 2024-06-11 Warszawa => Senior React Native Developer <=
- 2024-06-11 Gdańsk => Kierownik Działu Spedycji Międzynarodowej <=