タートルスピードライド
タイトル説明
pを法としてbを掛けた値を求めます。ここで、1≤a、b、p≤10^ 18です。
入出力
入力
最初の行a、2番目の行b、および3番目の行p。
出力
a * b modpの値を表す整数。
まず、64ビット整数の乗算のみで、モジュラスを使用するため、高精度で書き込む必要はありません。
#include <bits/stdc++.h>
using namespace std;
unsigned long long a,ans,b,q;
int main()
{
cin>>a>>b>>q;
while(a)
{
ans+=((a%10)*b%q)%q;
ans%=q;
b=b*10%q;
a/=10;
}
cout<<ans;
return 0;
}
これは本よりも少し速いようで、数学的な方法で推測できます。