鄙人才疏学浅,此中鄙陋甚多,望海涵!
题目描述
求 a 乘 b 对 p 取模的值。
输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。
输出格式
输出一个整数,表示a*b mod p的值。
数据范围
1≤a,b,p≤1018
输入样例
3
4
5
输出样例
2
算法1
(乘法换加法)
C++ 代码
#include<iostream>
using namespace std;
long long a,b,p;
int main()
{
cin>>a>>b>>p;
long long res=0;
while(b)
{
if(b&1) res=(res+a)%p;
a=(a+a)%p;
b>>=1;
}
cout<< res <<endl;
return 0;
}
算法2
转化为long double 类型
C++ 代码
#include<iostream>
using namespace std;
typedef long long ll;
typedef long double ld;
ll a,b,p;
int main()
{
cin>>a>>b>>p;
ll res=0;
ll k=(ld)a*b/p;
res=a*b-k*p;
cout<< res <<endl;
return 0;
}