题解 | #Look Up#

64位整数乘法

https://ac.nowcoder.com/acm/problem/50908

思路:
数据范围为1—1e18.直接取模相乘肯定会爆。这里我们考虑一个性质:a*2*b/2=a*b;
我们知道a*2<1e20.所以我们可以对a倍增,b倍减。
话不多说,上算法:
ll ans=0;    
    while(b)
    {
        if(b&1){ans=(ans+a)%p;}    
        a=(a*2)%p;
        b>>=1;
    }
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll a,b,p;
int main(void)
{
    ll ans=0;
    cin>>a>>b>>p;
    
    while(b)
    {
        if(b&1){ans=(ans+a)%p;}    
        a=(a*2)%p;
        b>>=1;
    }
    cout<<ans;
}




全部评论

相关推荐

字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务