最近,我一直在锻炼自己的回溯技能,当我发现这个问题要求我编写一个程序,该程序查找与给定的偶数数相同的除数的最小奇数。
原始文本如下:
考虑
N
是偶数。要求
确定除数与
M
相同的最小奇数N
。输入数据
程序从键盘上读取数字
N
。输出数据
程序将在屏幕上输出最小除数
M
与N
相同的奇数。{p>限制和澄清
1 ≤ N ≤ 1 000 000 000
甚至是保证
M
小于2 000 000 000
时间限制:1秒
示例
Input
360
Output
3465
我希望看到的是一个更好,更直观的解决方案(如果可能的话,代码)。
我试图通过用前9个奇数质数组成一个数组来解决此问题,然后用一个数组表示这些质数中每个质数的最大指数,这样prime_num ^ max_exponent
永远不会大于{{1 }}。我找到了给定n具有的除数,并使用 Backtracking 解决方案找到了2 ^ (31) - 1
,如下所示:
M
的除数,我们从指数数组中计算出除数(小心溢出)并按如下方式调用N
{ {1}} min
,然后将minOdd = min(minOdd, number);
0
周期,在该周期中我们递增当前索引并测试是否可以转到下一个索引return 1
,或者转到函数while
的开头(index < 9)
,或者除数的数量大于所需数量,则将当前指数设置为(index == 9)
,然后我们{ {1}} minOdd
周期,则将当前指数设置为0
,然后我们将return 0
设置。这是代码:
while
代码执行得很好,没有0
,没有return 0
,但是解决方案似乎太复杂了,我想对为什么没有更好的解决方案进行更彻底的解释,或者希望有更好的解决方案