64位整数乘法

求 a 乘 b 对 p

取模的值。
输入格式

第一行输入整数a
,第二行输入整数b,第三行输入整数p


输出格式

输出一个整数,表示a*b mod p的值。
数据范围

1≤a,b,p≤1018

输入样例:

3
4
5

输出样例:

2

#include<iostream>

using namespace std;
#define ll long long 
int main()
{
	ll a,b,p;
	cin>>a>>b>>p;
	ll ans=0;
	while(b)
	{
		if(b&1)  ans=(ans+a)%p;//这里容易打错,请注意
		a=2*a%p;
		b>>=1;
	}
	cout<<ans;
	 return 0;
}

因为C++内置的最高整数类型是64位,若a,b,p都在10^18,就该用这种方法
这个类似于快速幂的做法 把整数b用二进制表示,即b=.......

posted @ 2019-06-05 00:39  lxlql  阅读(535)  评论(0编辑  收藏  举报