首页 > 编程语言 >C++快速幂

C++快速幂

时间:2022-11-22 10:03:36浏览次数:38  
标签:int long 偶数 C++ 计算 快速

C++快速幂


快速幂的作用:

当我们做一些高次幂的计算时,就不能直接进行暴力的计算。例如:需要计算2^n
并且n≤10^18。这时候如果我们直接进行暴力的计算,时间复杂度为O ( n ),那么肯定会超时,这时候我们就需要一些更优美的算法来帮我们解决这个问题。

快速幂的思路:

首先我们要明确一点,对于一个m^n, 当n为偶数时m^n= (m^2 )^n/2
如果知道了这一点我们的问题就迎刃而解了。
求解x^k。
定义:x为当前的底数,f为临时存放处。
当k为偶数时,x*= x , k / = 2
当k为奇数时,k−− , f*= x,然后再以k为偶数的情况进行计算。

代码实现:

int quickpow(int n,int k) {
	long long x=n,f=1;
	while(k>1) {
		if(k%2==1){
 	k--;
    f*=x;
}
		x*=x;
        k/=2;
	}
	return x*f;
}

标签:int,long,偶数,C++,计算,快速
From: https://www.cnblogs.com/demc/p/16914197.html

相关文章

  • [C++学习笔记-IO控制_2]:控制台IO-cin 输入
    目录控制台I/O:cin输入1.重载的>>运算符2.cin的特点3.其他输入方法3.1单字符输入:get()3.2字符串输入:get()/getline()3.3其他的输入函数控制台I/O:cin输......
  • C/C++数据结构题目(2022)
    C/C++数据结构题目(2022)1、菜鸟智慧系统(线性表)[问题描述]使用双向链表模拟快递驿站的系统运作:假设快递驿站的货架分小、中、大3种类型,容量分别为500、100、50个包裹;......
  • C/C++员工通讯录(链表实现)
    C/C++员工通讯录(链表实现)一、设计一个员工通讯录(如编号、身份证号码、姓名等),用单链表实现员工通讯录的存储和增删改查等操作。通讯录链表的建立;通讯者信息的插入;通讯......
  • C/C++校运动会成绩管理系统
    C/C++校运动会成绩管理系统该系统可以记录校运动会全部运动项目的成绩、得分和排名情况,系统功能项以菜单形式显示。项目包括50米、100米、200米、400米、1500米、各接力项......
  • C/C++文件压缩与解压(哈夫曼编码)
    C/C++文件压缩与解压(哈夫曼编码)实验四:文件压缩与解压一、实验目的:掌握哈夫曼编码和解码二、实验内容:利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降......
  • C/C++仓库管理系统
    C/C++仓库管理系统四、仓库管理系统问题描述:1.问题描述:已知一工厂有5个仓库(仓库编号、仓库规格),用于保存公司生产的10类产品(产品编号、产品名称、产品规格),任何--......
  • 集合出现的快速失败机制
    快速失败:迭代器模式jdk1.8之前的机制:fail-fast,会出现并发修改异常集合中不支持并发,一个线程正在遍历,另一个线程正在执行add或remove普通for循环可以进行删除和遍历同时......
  • c++命令行传参
    intmain(intargc,char**argv)argc:命令行参数个数(ArgumentCount)argv:命令行参数向量(ArgumentVector)argv是一个字符串数组,双指针代表指向首个字符串的地址和......
  • 快速幂与逆元
    先上快速幂板子:#defineintlonglongintfast_power(intx,inty,intmod){intres=1;while(y){if(y&1)res=(res*x)%mod;x=(x*x)%mod;......
  • C++初阶(list容器+模拟实现)
    list介绍list的本质是一个带头的双向循环链表。链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列......