求 a 乘 b 对 p 取模的值。
输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。
输出格式
输出一个整数,表示a*b mod p
的值。
数据范围
1≤a,b,p≤10^18
输入样例:
3
4
5
输出样例:
2
第一种方法比较常规,对于快速幂进行了改进。
#include<iostream>
using namespace std;
typedef long long ll;
ll fun(ll i,ll j,ll k)
{
ll result=0;
while(j)
{
if(j&1)result=(result+i)%k;
i=(i*2)%k;
j>>=1;
}
return result;
}
int main()
{
ll i,j,k;
cin>>i>>j>>k;
cout<<fun(i,j,k)<<endl;
return 0;
}
第二种方法看看就好,实际不要用,风险高。
#include<iostream>
using namespace std;
typedef long long ll;
ll fun(ll i,ll j,ll k)
{
return(i*j-(ll)((long double)i/k*j)*k+k)%k;
}
int main()
{
ll i,j,k;
cin>>i>>j>>k;
cout<<fun(i,j,k)<<endl;
return 0;
}