本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。
欢迎大家订阅我的专栏:算法题解:C++与Python实现!
附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总
【题目描述】
求 a a a 乘 b b b 对 p p p 取模的值。
【输入】
第一行输入整数 a a a,第二行输入整数 b b b,第三行输入整数 p p p。
【输出】
输出一个整数,表示a*b mod p
的值。
【输入样例】
3
4
5
【输出样例】
2
【算法标签】
《AcWing 90 64位整数乘法》 #位运算#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
#define int long long // 定义int为long long类型
/**
* 快速乘法函数 - 计算 (a * b) % p
* 使用二进制分解优化乘法过程,避免直接大数相乘
* @param a 乘数1
* @param b 乘数2
* @param p 模数
* @return (a * b) % p 的结果
*/
int qadd(int a, int b, int p)
{
int res = 0; // 初始化结果为0
// 使用二进制分解法进行快速乘法
while (b)
{
// 如果当前最低位为1,则将a加到结果中
if (b & 1)
{
res = (res + a) % p;
}
// a倍增,相当于左移一位
a = (a + a) % p;
// b右移一位,相当于除以2
b >>= 1;
}
return res;
}
signed main()
{
int a, b, p; // 定义输入的三个参数
// 输入三个整数
cin >> a >> b >> p;
// 调用快速乘法函数并输出结果
cout << qadd(a, b, p) << endl;
return 0;
}
【运行结果】
3
4
5
2