Witam,
Zdefiniowane są 3 liczby typu unsigned long long:
unsigned long long high;
unsigned long long low;
unsigned long long M;
W jaki sposób można najszybciej policzyć (high * 2^64) + (low) (mod M) ?
Interesuje mnie teoria, nie gotowe rozwiązanie. A spędziłem już nad tym z pół godziny nad kartką...
To znaczy można to zrobić dość łatwo na siłę. Robić modulo na każdym składniku (również 2 ^ 64), wymnażać i dodawać tak długo dopóki nie otrzymamy wartości mniejszej od M. Zrobiłem symulację w excelu i niestety taki algorytm często potrzebował by kilkudziesięciu obiegów pętli zanim zwrócił by wynik. Ja natomiast chciałbym obliczyć wynik bez używania pętli (w czasie stałym). Jak można to zrobić?