题解 | #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;
}




全部评论

相关推荐

不愿透露姓名的神秘牛友
11-02 10:52
是双非本不配了吗
究极混子:双九一样简历挂
投递地平线等公司10个岗位 > 你都收到了哪些公司的感谢信?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务