该死的快速幂

it2025-06-09  18

这就是快速幂的魅力吗

题目: 很容易理解,就是输出三个数;A,B,K;然后输出A^B%K的结果; 思路: 讲实话,我最开始并没有想到快速幂这个方法,因为没讲过也没了解过;所以我的思路很简单,就是对输入的数进行分块处理。因为输入的A可能会很大,所以我把A%K作为我的一个全新的输出数,记做C,然后去求C^B%K的结果,但因为B的值也可能很大,所以我把B进行了分块处理。 反思:虽然这样也可以做,但是这样分块处理的运行速度比快速幂要慢,而且能处理的数也没有快速幂来的大。 代码 : 分块的思路的代码:

#include <cstdio> int main() { long long a,b,k; scanf("%lld %lld %lld",&a,&b,&k); int c,ans; ans = 1; c = a%k; if(b>1000) { int d,e; d = b/1000; e = b%1000; int f = 1000; while(f--) { ans = ans*c%k; } int g,h; h = 1; g = ans; while(d--) { h = h*g%k; } ans = h; while(e--) { ans =ans*c%k; } } else { ans = ans*c%k; } printf("%d\n",ans); return 0; }

快速幂的代码:

#include <cstdio> using namespace std; typedef long long ll; ll q_pow(ll a, ll b,int mod){` ll ans = 1; while(b > 0){ a = a%mod; if(b & 1){ ans = ans * a % mod; } a = a * a % mod; b >>= 1; } return ans; } int main() { ll a,b; int k; scanf("%lld %lld %d",&a,&b,&k); printf("%lld\n",q_pow(a,b,k)); }

看完两者的代码,很明显就可以看出快速幂有多香了吧! 这个是改过之后的题目网址: https://sdnuoj.rainng.com/problem/show/1056

最新回复(0)