acwing 90. 64位整数乘法

题目传送门

题目描述

求 aa 乘 bb 对 pp 取模的值。

输入格式

第一行输入整数aa,第二行输入整数bb,第三行输入整数pp。

输出格式

输出一个整数,表示a*b mod p的值。

数据范围

1≤a,b,p≤10181≤a,b,p≤1018

输入样例:

3
4
5

输出样例:

2

位运算

分析

a*10 = a*(1011)

和快速幂的思想类似,只不过把里面的乘换成了加

代码

#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;

LL qadd(LL a, LL b, LL p)
{
	LL res = 0;
	LL t = a;
	while(b)
	{
		if(b & 1) res = (res + t) % p;
		t = (t + t) % p;
		b >>= 1;
	}
	return res;
 } 
 
int main()
{
	LL a, b, p;
	scanf("%lld%lld%lld", &a, &b, &p);
	printf("%lld\n", qadd(a, b, p));
	return 0;
}

时间复杂度

参考文章

posted @ 2022-03-10 11:27  VanHope  阅读(19)  评论(0编辑  收藏  举报