快速幂,快速乘

快速幂

问题

求 a 的 b 次方对 p 取模的值,其中 0<= a, b, p<=10^9

#include 

using namespace std;
typedef long long ll;

ll a, b, p;

int fun(){
    ll ans = 1 % p;
	while(b){
		if(b & 1){
			ans = (ll)(ans * a) % p;
		}
		a = (ll)(a * a) % p;
		b = b >> 1; 
	}
	return ans;
}

int main(){
	cin>>a>>b>>p;
	cout<<fun();
} 

快速乘

问题

求 a 乘 b 对 p 取模的值,其中 1≤a,b,p≤10^18

#include 

using namespace std;

typedef long long ll;

ll a, b, p;

int fun(){
	ll ans = 0;
	while(b){
		if(b & 1){
			ans = (ans + a) % p; 
		}
		a = (a << 1) % p;
		b = b >> 1;
	}
    cout<<ans;
	return 0;
}

int main(){
	cin>>a>>b>>p;
	fun();
}

你可能感兴趣的:(#,算法模板)