试题 算法训练 数的潜能(快速幂)
问题描述
将一个数N分为多个正整数之和,即N=a1+a2+a3+…+ak,定义M=a1a2a3*…*ak为N的潜能。
给定N,求它的潜能M。
由于M可能过大,只需求M对5218取模的余数。
输入格式
输入共一行,为一个正整数N。
输出格式
输出共一行,为N的潜能M对5218取模的余数。
样例输入
10
样例输出
36
这道题是把正整数拆3,变成3+3+3+…,直到这个数小于等于4时;证明请看链接: 正整数分解使得乘积最大问题
那么这道题就变成3的x次幂乘以小于等于4时的数,由于N很大,那么X也很大,无法用pow(),也不能一个一个乘(会超时),快速幂就可以解决问题。
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
ll poww(ll j,