寻找除数与给定数相同的最小奇数

时间:2019-07-15 19:07:11

标签: c++ division backtracking recursive-backtracking

最近,我一直在锻炼自己的回溯技能,当我发现这个问题要求我编写一个程序,该程序查找与给定的偶数数相同的除数的最小奇数。

原始文本如下:

NrDiv | www.pbinfo.ro

  

考虑N是偶数。

     

要求

     

确定除数与M相同的最小奇数N

     

输入数据

     

程序从键盘上读取数字N

     

输出数据

     

程序将在屏幕上输出最小除数MN相同的奇数。{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,如下所示:

  • 在数组中,我们跟踪前9个指数的当前指数
    奇质数
  • 我们计算到现在为止除数的数量
  • 如果除数等于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,但是解决方案似乎太复杂了,我想对为什么没有更好的解决方案进行更彻底的解释,或者希望有更好的解决方案

0 个答案:

没有答案
相关问题