diff --git a/calc.cpp b/calc.cpp index 094c3a0..41e4d7b 100644 --- a/calc.cpp +++ b/calc.cpp @@ -11,17 +11,22 @@ inline void sub(int &a, int b) { } inline int mul(int a, int b) { + #if !defined(_WIN32) || defined(_WIN64) + return (long long) a * b % md; + #endif + unsigned long long x = (long long) a * b; - unsigned xh = (unsigned) (x >> 32), xl = (unsigned) x, d, m; + + unsigned xh = (unsigned) (x >> 32), xl = (unsigned) x, s, y; asm( "divl %4; \n\t" - : "=a" (d), "=d" (m) + : "=a" (s), "=d" (y) : "d" (xh), "a" (xl), "r" (md) ); - return m; + return y; } inline int power(int a, int b) {