MnZn求助,龟速乘是什么原理?
  • 板块学术版
  • 楼主Zhang_Wenjie
  • 当前回复12
  • 已保存回复12
  • 发布时间2023/6/28 22:26
  • 上次更新2023/11/3 12:12:04
查看原帖
MnZn求助,龟速乘是什么原理?
481621
Zhang_Wenjie楼主2023/6/28 22:26

1.什么原理,为什么不会爆ll?

2.时间复杂度怎么分析?

3.担心爆ll,能直接用ull存吗?

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll quick_mul(ll a, ll b, ll p)
{
	ll res = 0;
	while(b)
	{
		if(b & 1) res = (res + a) % p;
		a = (a + a) % p;
		b >>= 1;
	}
	return res;
}
ll quick_pow(ll a, ll b, ll p)
{
	ll ans = 1 % p;
	while(b)
	{
		if(b & 1) ans = quick_mul(ans, a, p) % p;
		a = quick_mul(a, a, p) % p;
		b >>= 1;
	}
	return ans;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	ll a, b, p;
	cin >> a >> b >> p;
	cout << quick_pow(a,b,p) << endl;
	return 0;
}
2023/6/28 22:26
加载中...