快速幂算法

简介: 快速幂算法

快速幂(Fast Power),顾名思义,就是快速算底数 x 的 n 次幂。其核心思想就是每一步都把指数减半,而相应的底数做平方运算。这样不仅能把非常大的指数给快速变小,所需要执行的循环次数也变小,而最后表示的结果不会变化。


Acwing 89 a的b次方


题目:


求 aa 的 bb 次方对 pp 取模的值。


输入格式


三个整数 a,b,pa,b,p ,在同一行用空格隔开。


输出格式


输出一个整数,表示a^b mod p的值。


数据范围


0≤a,b≤1090≤a,b≤109

1≤p≤1091≤p≤109


输入样例:


3 2 7


输出样例:


2


AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
  long long a,b,p,sum=1;
  cin>>a>>b>>p;
  while(b)
  {
      if(b&1)
      sum=sum*a%p;
      b>>=1;
      a=a*a%p;
  }
  cout<<sum%p<<endl;
  return 0; 
}


拓展:

力扣 Pow(x, n)

题目:


实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。


示例 1:


输入:x = 2.00000, n = 10

输出:1024.00000

示例 2:


输入:x = 2.10000, n = 3

输出:9.26100

示例 3:


输入:x = 2.00000, n = -2

输出:0.25000

解释:2-2 = 1/22 = 1/4 = 0.25


提示:


-100.0 < x < 100.0

-231 <= n <= 231-1

n 是一个整数

要么 x 不为零,要么 n > 0 。

-104 <= xn <= 104


AC代码:

class Solution {
public:
    double ksm(double x,long long n)
    {
        if(n==0)
        return 1.0;
        double y=ksm(x,n/2);
        if(n%2==0)
        return y*y;
        else
        return x*y*y;
    }
    double myPow(double x, int n) 
    {
        long long y=n;
        if(n>=0)
        return ksm(x,y);
        else
        return 1.0/ksm(x,-y);
    }
};

目录
相关文章
|
8月前
|
算法
|
8月前
|
人工智能 Kubernetes 算法
算法常见技巧 -快速幂及其相关应用
算法常见技巧 -快速幂及其相关应用
|
算法
快速幂算法
什么是快速幂呢?就是更快速的计算幂运算。
6591 0
|
算法 Python
快速幂算法的实现
快速幂算法的实现
快速幂算法的实现
|
机器学习/深度学习 算法 JavaScript
【算法日记】快速幂:关于我知道答案却做不出来这档事
LeetCode第330场周赛,直接卡在了第二题😭,掉大分,学到一手快速幂。本文包含以下内容:快速幂,快速幂取余。
173 0
|
算法
算法题每日一练---第60天:快速幂
快速幂是一种简单而有效的小算法。
192 15
算法题每日一练---第60天:快速幂
[解题报告]《算法零基础100讲》(第15讲) 二分快速幂
[解题报告]《算法零基础100讲》(第15讲) 二分快速幂
[解题报告]《算法零基础100讲》(第15讲) 二分快速幂
|
算法
算法笔记学习---快速幂
算法笔记学习---快速幂
5694 0
|
算法 C语言
快速幂算法(数学)
快速幂算法(数学)
|
4天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。