求大数除法的模

pom*_*nto 2 c++ algorithm modulo

我必须找到这些数字的除法模数:

239^(10^9) 和 10^9 + 13

239^(10^9) 和 10^9 + 15

... 等等,最多 1001;

在 C++ 中仅使用本机库。怎么做?如您所见,第一个数字大约是 30 亿个符号。

我试图找到模周期的长度,但它们比 10 还要长,甚至unsigned long long int无法处理这么大的数字 (239^10)。另外我认为“大数字”算法(将数字存储为数组)对我也不起作用(500 * 10 ^ 9)是太多操作。

顺便说一句,这应该比 5 小时内更有效。

Pha*_*ung 6

我们知道:

(A*B) % MOD = ((A % MOD) * (B % MOD)) % MOD
Run Code Online (Sandbox Code Playgroud)

所以

(A^n) % MOD = (((A ^ (n/2)) % MOD) * ((A ^ (n/2)) % MOD)) % MOD;
Run Code Online (Sandbox Code Playgroud)

我们可以递归地做到这一点。

所以,这是我们的功能:

int cal(int pow, int val, int MOD){
   if(pow == 0)
      return 1;
   int v = cal(pow/2, val, MOD);
   if(pow % 2 == 0)
      return (v*v) % MOD; 
   else
      return (((v*val) % MOD) * v) % MOD;
}
Run Code Online (Sandbox Code Playgroud)