试题 算法训练 数的潜能(快速幂)

正整数分解,使得乘积最大
需要把一个正整数分为多个3相加最后一个数小于等于4时停止

#include <iostream>
using namespace std;
typedef long long ll;
ll a;

ll fast_pow(ll m, ll h) {//快速幂
	ll sum = 1;
	int num = 3;
	if (m == 0)//分情况,数本身小于等于4
		return h;
	else if (m == 1 && h == 0)//数本身为3时
		return 3;
	else {
		while (m) {
			if (m & 1)
				sum = sum * num % 5218;
			num = num * num % 5218;
			m >>= 1;
		}
	}
	return sum * h % 5218;
}

int main() {
	cin >> a;
	ll m, h;
	m = a / 3;
	h = a % 3;
	if ((h == 1) && (m > 0)) {//最后一个数为4
		m -= 1;
		h = 4;
	} else if ((m != 0) && (h == 0)) {//整除情况
		h = 1;
	}
	cout << fast_pow(m, h);
	return 0;
}
posted @   帝宝单推人!  阅读(312)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示