当前位置: 首页 > news >正文

【算法】acwing算法基础875. 快速幂

题目

给定 n 组 ai,bi,pi,对于每组数据,求出 ai^bi mod pi 的值。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含三个整数 ai,bi,pi。

输出格式

对于每组数据,输出一个结果,表示 ai^bi mod pi 的值。

每个结果占一行。

数据范围

1≤n≤100000

1≤ai,bi,pi≤2×109

输入样例:

2

3 2 5

4 3 9

输出样例:

4

1

来源:acwing算法基础875. 快速幂


思路(注意事项)

b转为2进制,另外注意防止越界需要定义ansalong long.


纯代码

#include<iostream>
using namespace std;

typedef long long LL;

int qmi (LL a, int b, int p)
{
	LL ans = 1;
	while (b)
	{
		if(1&b) ans = ans * a % p;
		b >>= 1;
		a = a * a % p;
	}
	return ans;
}

int main(){
	int n;
	cin >> n;
	
	while (n --)
	{
		LL a;
		int b, p;
		
		scanf ("%lld%d%d", &a, &b, &p);
		cout << qmi (a, b, p) << endl;
	}
	return 0;
}

题解(带注释)

#include<iostream>
using namespace std;
typedef long long LL; // 定义 long long 的别名 LL

// 定义一个函数 qmi,用于计算 a 的 b 次方模 p 的结果
int qmi(LL a, int b, int p)
{
    LL ans = 1; // 初始化结果为 1
    while (b) // 当 b 不为 0 时循环
    {
        if (1 & b) ans = ans * a % p; // 如果 b 的最低位为 1,将 a 乘到结果中
        b >>= 1; // 将 b 右移一位
        a = a * a % p; // 将 a 平方
    }
    return ans; // 返回最终结果
}

int main(){
    int n; // 定义测试用例的数量
    cin >> n; // 输入测试用例的数量

    // 处理每个测试用例
    while (n --)
    {
        LL a; // 定义底数 a
        int b, p; // 定义指数 b 和模数 p

        // 输入 a, b, p
        scanf("%lld%d%d", &a, &b, &p);

        // 输出 a 的 b 次方模 p 的结果
        cout << qmi(a, b, p) << endl;
    }
    return 0;
}
http://www.dtcms.com/a/49122.html

相关文章:

  • ArcGIS Pro应用指南:如何为栅格图精确添加坐标信息
  • Rocky Linux 系统安装 typecho 个人博客系统(Docker 方式)
  • 基于SpringBoot的校园二手交易平台(源码+论文+部署教程)
  • TCP的四次挥⼿为什么是四次?为什么不能是三 次
  • Tailwind CSS 问题:npm error could not determine executable to run
  • FFmpeg-chapter3和chapter4-读取视频流(原理篇和实战篇)
  • 点大商城V2-2.6.6.1全能版源码+最新排队免单插件功能
  • Error:java: 错误: 不支持发行版本 14
  • 千峰React:外部库引用
  • SSH监控
  • 深度学习模型与前端结合
  • SimPro - 轻量级协议模拟器
  • [Git]克隆仓库报错warning: remote HEAD refers to nonexistent ref, unable to checkout
  • CAP定理和BASE理论 趣学!
  • Kafka Connect连接器的全生命周期:
  • Nat Mach Intell | AI分子对接算法评测
  • 魔改switch样式
  • JVM 深入理解与性能优化
  • 哈工大计算机系统大作业----程序人生
  • 为何在用户注销时使用 location.href 而非 Vue Router 的 router.push
  • 理解 TCP 三次握手与四次挥手:详解网络连接与断开过程
  • SpringBoot原理-04.自动配置-原理分析-源码跟踪
  • SEKI —— 基于大型语言模型的自进化与知识启发式神经架构搜索
  • 蓝桥杯备赛Day12 动态规划1基础
  • UDP透传程序
  • 数据结构:哈希表
  • Django 项目模块化开发指南:实现 Vue 风格的组件化
  • 基础工具常用api汇总(机器学习)
  • modbus 协议的学习,谢谢老师
  • 字节跳动系统攻防算法岗-Flow安全内推