第1章64ビット整数乗算

タートルスピードライド

タイトル説明

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;
}

これは本よりも少し速いようで、数学的な方法で推測できます。

おすすめ

転載: blog.csdn.net/ydsrwex/article/details/112253076