快速幂(简单 C++)

news2024/11/25 22:35:39

快速幂:就是能够快速地计算出以 a 为底数,b 为指数的幂,相较于传统的求幂算法,当指数 b 非常大时,使用快速幂算法,可以大大地降低循环的次数。

以3 ^ 13 为例:

  1. 首先将 b 转换成二进制:(13)_{10} = (1101)_{2} = 1*2^3+1*2^2+0*2^1+1*2^0 = 2^3+2^2+2^0

  2. 所以3^{13}=3^{2^{3}+2^{2}+2^{0}}

  3. 那么 a ^ b 可以转换为:3^{13} = 3^{2^3}*3^{2^2}*3^{2^0}  ;

#include<iostream>
using namespace std;
int main()
{
  long long a, b;
  long long ans=1,tmp;
  cin>>a>>b;
  tmp=a;
  while(b)
  {
    if(b&1) ans=ans*tmp; //该位是1,则表示存在
    tmp=tmp*tmp;         
    b>>=1;               //向左移一位
  }
  cout<<ans;
}

 一边情况下题目数据算出来较大,所以需要取模。p为模,代码如下:

#include<iostream>
using namespace std;
int main()
{
    long long a, b,p;
    long long ans = 1, tmp;
    cin >> a >> b>>p;
    tmp = a;
    while (b)
    {
        if (b & 1) ans = ans * tmp%p;
        tmp = tmp * tmp%p;
        b >>= 1;
    }
    cout << ans;
}

 

例题:
 

题目描述

找到了心仪的小姐姐月月后,华华很高兴的和她聊着天。然而月月的作业很多,不能继续陪华华聊天了。华华为了尽快和月月继续聊天,就提出帮她做一部分作业。
月月的其中一项作业是:给定正整数A、B、P,求ABmod  PA^B\mod PABmodP的值。华华觉得这实在是毫无意义,所以决定写一个程序来做。但是华华并不会写程序,所以这个任务就交给你了。
因为月月的作业很多,所以有T组询问。

输入描述:

第一行一个正整数T表示测试数据组数。
接下来T行,每行三个正整数A、B、P,含义如上文。

输出描述:

输出T行,每行一个非负整数表示答案。

示例1

输入

2
2 5 10
57284938291657 827493857294857 384729583748273

输出

2
18924650048745

思路

简单的快速幂,但是由于数据范围过大,在快速幂里的乘法不能直接相乘,得自己写一个类似于快速幂的快速乘。

#include<iostream>//快速幂 快速积
using namespace std;
long long ksj(long long a, long long b, long long p)//快速积
{
	long long ans = 0;
	while (b)
	{
		if (b & 1)
			ans = (ans + a) % p;
		a = (a + a) % p;
		b >>= 1;
	}
	return ans;
}
long long ksm(long long a, long long b, long long p)//快速幂
{
	long long ans = 1;
	while (b)
	{
		if (b & 1) ans = ksj(ans, a, p) % p;
		a = ksj(a, a, p) % p;
		b >>= 1;
	}
	return ans;
}
int main()
{
	long long t, a, b, p, c;
	cin >> t;
	while (t--)
	{
		cin >> a >> b >> p;
		c = ksm(a, b, p);
		cout <<"结果:"<< c << endl;
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes配置Jenkins Slave

Kubernetes配置Jenkins Slave 部署在kubernetes集群内 1、部署jenkins 1.1、命名空间 apiVersion: v1 kind: Namespace metadata:name: jenkinscilabels:app: jenkinsci1.2、Deployment apiVersion: apps/v1 kind: Deployment metadata:name: jenkinscinamespace: jenkinsci…

软考A计划-系统架构师-案例分析考前背诵-上篇

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

〖数据结构〗一棵有点自律的树——搜索二叉树

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;搜索二叉树概念&#x1f337;二叉搜索树的构建&#x1f33a;查找操作&#x1f33a;插入操作&#x1f33a;删除操作&#x1f33a;遍历操作☘️测试 &#x1f3f5;️拓展——递归实现&#x1f343;递归查找&…

MATLAB与物联网:如何应用MATLAB进行物联网数据的处理和分析

第一章&#xff1a;引言 物联网&#xff08;Internet of Things, IoT&#xff09;作为当今科技领域的热门话题&#xff0c;正在改变我们的生活方式和工作方式。随着物联网设备的普及和数据的不断增长&#xff0c;如何高效地处理和分析物联网数据成为了一个重要的挑战。MATLAB作…

【C语言之操作符1】

C语言之操作符1 1. 操作符分类2. 算术操作符3. 移位操作符3.1 左移操作符3.2 右移操作符 4. 位操作符5. 赋值操作符 1. 操作符分类 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术…

【哈佛积极心理学笔记】第14讲 过犹不及

第14讲 过犹不及 Recap: Stress is not the problem. The problem is lack of revovery. level of stress -> chronic stress -> chronic anxiety -> depression Recovery on different level: micro level 15 min break, lunch timemezzo level, full night slee…

1.Apollo开发部署-linux

一.官方文档 https://www.apolloconfig.com/#/zh/deployment/quick-start-docker 二.环境准备 1.MySql 5.6.51.单独服务器192.168.2.13 https://downloads.mysql.com/archives/installer/ 2.JDK 1.8.X https://www.oracle.com/java/technologies/downloads/ 三.Apollo部署…

【JVM篇】垃圾回收算法

目录 1、前言 2、标记-清除算法 3、标记-整理算法 4、标记-复制算法 5、总结 1、前言 说起垃圾回收&#xff08;Garbage Collection&#xff09;&#xff08;本文简称GC&#xff09;。相信同时对C和Java有了解的小伙伴都知道&#xff0c;C在new完对象后&#xff0c;是需要…

【Linux】发展史浅谈

为什么要学Linux&#xff1f; LInux和微软的Windows在定位上都是一样的&#xff0c;即操作系统。而且LInux是一款雄霸服务端的操作系统&#xff0c;是在企业端被高频使用的后台操作系统。 科技发展的基本模式 所有的技术进步&#xff0c;本质都是为了促进更好的工具的发明&a…

【Python ORM】零基础也能轻松掌握的学习路线与参考资料

Python orm&#xff08;Object-Relational Mapping&#xff09;是一种模式&#xff0c;它将对象和关系型数据库之间的映射相互转换&#xff0c;使得应用程序可以通过面向对象的方式来操作数据库。Python orm 在开发大型 Web 应用程序中特别有用&#xff0c;使得与数据库的交互变…

【IMX6ULL驱动开发学习】08.IMX6ULL通过GPIO子系统函数点亮LED

通过GPIO子系统函数点亮LED 1、GPIO子系统函数 1.1 确定 led 的GPIO标号&#xff0c;查看内核中的gpiochip 查看 gpiochip &#xff0c;以正点原子的IMX6ULL阿尔法开发板为例 [root100ask:/sys/class/gpio]# cat /sys/kernel/debug/gpio 查看原理图&#xff0c;发现led接的引…

Linux虚拟网络设备---之使用Veth pair连接linux网桥bridge

本文目录 1、我们可以用以下命令来创建veth pair: veth0----veth12、创建五个命名空间namespaces后&#xff0c;可以用以下命令将veth设备对的一端移入namespaces命名空间&#xff0c;并开启veth2、将veth设备对的另外一端连接到linux网桥&#xff0c;并将所有namespaces命名空…

【Redis应用】UV统计(四)

&#x1f697;Redis应用学习第四站~ &#x1f6a9;本文已收录至专栏&#xff1a;Redis技术学习 一.引入 首先我们要搞懂两个概念&#xff1a; UV&#xff1a;全称Unique Visitor&#xff0c;也叫独立访客量&#xff0c;是指通过互联网访问、浏览这个网页的自然人。1天内同一个…

【动态规划】斐波那契数列模型

冻龟算法系列之斐波那契数列模型 文章目录 【动态规划】斐波那契数列模型1. 第N个泰波那契数1.1 题目解析1.2 算法原理1.2.1 状态表示1.2.2 状态转移方程1.2.3 初始化1.2.4 填表顺序1.2.5 返回值 1.3 编写代码1.4 空间优化 2. 三步问题2.1 题目解析2.2 算法原理2.2.1 状态表示2…

解决Centos安装时找不到磁盘:未选择任何磁盘(no diks selected),本地标准磁盘为空

文章目录 问题描述问题原因解决办法 问题描述 笔者最近又买了一台新电脑&#xff0c;并打算在上面安装 Linux 来充当一个新的服务器结点。但很不幸的是&#xff0c;每次笔者略微尝试新事物时&#xff0c;都要踩很多坑。笔者在使用 U 盘刻录 CentOS 8 镜像之后&#xff0c;准备在…

公平锁/非公平锁/可重入锁/自旋锁

在JAVA中我们知道有很多加锁的方式&#xff0c;比如常见的 通过synchronized关键字&#xff0c;还有Lock&#xff0c;还有之前说原子CAS操作时有看到过的死循环方式的自旋锁。 借此来说一下锁的分类: 公平锁: 是指多个线程按照申请的顺序来获取锁&#xff0c;每次获取锁时会…

dp算法篇Day1

"多希望有人来陪我&#xff0c;度过末日啊~" 讲讲我为什么突然想更新这篇栏目。 想想自己也算 "系统" 接触计算机这个学科也有差不多一年了&#xff0c;回想起当初下定决心要全身心投入到这个专业或者说行业中来&#xff0c;现在到了这样的地步&#xff0c…

CSS基础学习--10 margin(外边距)

一、定义&#xff1a; CSS margin(外边距)属性定义元素周围的空间。 二、margin margin 清除周围的&#xff08;外边框&#xff09;元素区域。margin 没有背景颜色&#xff0c;是完全透明的。 margin 可以单独改变元素的上&#xff0c;下&#xff0c;左&#xff0c;右边距&a…

今天面了个35k字节跳动出来,真是砂纸擦屁股,给我露了一手...

​2023年春招已经结束&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山之石…

AI 绘画(0):导论

文章目录 导论感谢人员Ai绘画前期准备软件环境硬件条件 Ai绘画介绍Ai绘画简单流程介绍Ai绘画软件介绍参数输入介绍 Ai绘画公约 导论 Ai绘画是最近比较热门的绘画方式&#xff0c;以干掉原画师为口号&#xff0c;引起了激烈的讨论。Ai绘画能否取代人工我们先不谈&#xff0c;但…