0102 64位整数乘法 0x00「基本算法」例题
描述
求 a 乘 b 对 p 取模的值,其中 1≤a,b,p≤10^18。
输入格式
第一行a,第二行b,第三行p。
输出格式
一个整数,表示a*b mod p的值。
样例输入
2
3
9
样例输出
6
a*b mod p=a*b-[a*b/p]*p
[]为向下去整
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
long long a,b,p;
scanf("%lld%lld%lld",&a,&b,&p);
a%=p;b%=p;
long long c=(long double)a*b/p;
long long ans=a*b-c*p;
if (ans<0) ans+=p;
else if (ans>=p) ans-=p;
printf("%lld",ans);
}