[Acwing] 算法提高课汇总六 基础算法

位运算

64位整数乘法

题意 :
给定 a , b ( 1 0 18 ) a,b(10^{18}) a,b(1018),询问 a ∗ b % p a*b\%p ab%p的值

思路 :
我们可以采用类似与快速幂的想法

b = 2 1 + 2 2 . . . . . + 2 n b =2^1+2^2.....+2^n b=21+22.....+2n
a ∗ b = a ∗ 2 1 + a ∗ 2 2 . . . . + a ∗ 2 n a*b=a*2^1+a*2^2....+a*2^n ab=a21+a22....+a2n

因此我们只需要类似于快速幂的处理方法即可,在奇数的时候进行计算贡献

code :

ll qmi(ll a,ll b,ll p){
	ll res = 0;
	while(b){
		if(b&1) res = (res+a)%p;
		a = (a+a)%p;
		b>>=1;
	}
	return res;
	
}

void solve(){
	ll a,b,p;cin>>a>>b>>p;
	cout<<qmi(a,b,p);
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值