本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。
欢迎大家订阅我的专栏:算法题解:C++与Python实现!
附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总
【题目来源】
AcWing:875. 快速幂 - AcWing题库
【题目描述】
给定 n n n 组 a i , b i , p i a_i,b_i,p_i ai,bi,pi,对于每组数据,求出 a i b i m o d p i a_i^{b_i} \ mod \ p_i aibi mod pi 的值。
【输入】
第一行包含整数 n n n。
接下来 n n n 行,每行包含三个整数 a i , b i , p i a_i,b_i,p_i ai,bi,pi。
【输出】
对于每组数据,输出一个结果,表示 a i b i m o d p i a_i^{b_i} \ mod \ p_i aibi mod pi 的值。
每个结果占一行。
【输入样例】
2
3 2 5
4 3 9
【输出样例】
4
1
【代码详解】
《AcWing 875 快速幂》 #数学知识# #快速幂#
#include <bits/stdc++.h>
using namespace std;
typedef long long LL; // 定义长整型别名,防止乘法溢出
// 快速幂算法:计算 a^k mod p
int qmi(int a, int k, int p)
{
int res = 1; // 初始化结果为1(a^0 = 1)
// 当指数k不为0时循环
while (k)
{
// 如果当前最低位为1,将a乘入结果
if (k & 1)
res = (LL)res * a % p; // 强制转换为LL防止溢出
// a平方,准备处理下一位
a = (LL)a * a % p; // 强制转换为LL防止溢出
// 右移一位,处理下一个二进制位
k >>= 1;
}
return res;
}
int main()
{
int n; // 查询次数
scanf("%d", &n);
// 处理每个查询
while (n--)
{
int a, k, p; // 底数、指数、模数
scanf("%d%d%d", &a, &k, &p);
// 调用快速幂函数并输出结果
printf("%d\n", qmi(a, k, p));
}
return 0;
}
【运行结果】
2
3 2 5
4
4 3 9
1