64位整数乘法 快速幂
本人水平有限,题解不到为处,请多多谅解
本蒟蒻谢谢大家观看
题目:求a*b%p的结果,(1<=a,b,p<=10^18)
此题和上一题类似 只需要把乘改成加 (ans初始为0)
如:2*15 先求2*7+2*7+2*1(求2*15),再求 2*3+2*3+2*1(求2*7)最后求 2*2+2*1(求2*3);
code:
#include<bits/stdc++.h> #pragma GCC optimize(3) #define int long long using namespace std; int a,b,ans=0,p; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} return x*f; } signed main() { int a1,b1; a=read(),b=read(),p=read(); a1=a,b1=b; while(b){ if(b%2==1)ans=(ans+a)%p; a=(a+a)%p; b=b/2; } printf("%lld",ans); return 0; }