快速幂取余

xiaoxiao2021-02-28  63

这里我们需要两个公式:

这两个公式都不难理解,自己可以验证一下,3^4 = 9^2。

有了这两个公式之后我们就可以考虑思路了。

我们就以b为偶数来举例。

a^b%c = ((a^2)^b/2)%c;

在这里我们假设b/2还是偶数,那么

((a^2)^b/2)%c = (((a^2)^2)^(b/2)/2)%c;

代码如下:

#include <bits/stdc++.h> using namespace std; int quickMod(int a, int b, int c) { int ans = 1; while (b) { if (b % 2 == 1) ans = (ans * a) % c; b /= 2; a = (a * a) % c; } return ans; } int main() { int a, b, c; while (~scanf("%d %d %d", &a, &b, &c)) { printf("%d\n", quickMod(a, b, c)); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-62568.html

最新回复(0)