[蓝桥杯python] 数的潜能
问题描述
将一个数N分为多个正整数之和,即N=a1+a2+a3+…+ak,定义M=a1*a2*a3*…*ak为N的潜能。
给定N,求它的潜能M。
由于M可能过大,只需求M对5218取模的余数。
1、资源限制
资源限制
时间限制:1.0s 内存限制:256.0MB
2、输入格式
输入共一行,为一个正整数N。
3、输出格式
输出共一行,为N的潜能M对5218取模的余数。
4、样式输入及输出
样例输入
10
样例输出
36
5、代码及解析
具体解析请大家自己看一下代码中的备注,在此不多做解释。
本题首先我是使用回溯的方法来解决,但是深度达不到因此后面运行报错。后面又利用数学归纳来解决,但是只能完成40%所以无能为力.....如果有人解决发一下更好的答案一起加油谢谢!!
'''
这道题有个规律就是,尽量把一个数变为2和3的和
这样乘积的值最大化,但是以下代码超过5218就会出错。
因此以下两个代码。第一个的话是全部正确但是递归深度
超过1000后就不能运行。第二个的话就是开头的问题
'''
'''递归'''
'''
n = int(input())
result = 0
mid = []
def DFS(nums):
global result,mid
if nums > n:
return
if nums == n:
mid_result = 1
for i in range(len(mid)):
mid_result = mid_result * mid[i]
if mid_result >= result:
result = mid_result
return
for j in range(2):
nums += j+2
mid.append(j+2)
DFS(nums)
nums -= j+2
mid.pop()
if n == 1:
print(1)
else:
DFS(0)
print(result)
'''
'''归纳'''
'''
n = int(input())
f = 3
if n==1:
print(1)
elif n==2:
print(2)
elif n==3:
print(3)
else:
for i in range(4,n+1):
if (i-1)%3 == 0:
f = f//3*4
else:
f = f//2*3
print(f%5218)
'''
结果:
自己写的所以有点复杂,但是至少能完成嘿嘿。如果各位有优化欢迎评论区讨论!!