需要帮助解决Project Euler问题200

时间:2009-04-22 17:43:20

标签: language-agnostic

我正在尝试制定解算Project Euler's Problem 200的算法。

  

我们将sqube定义为数字   形式, p 2 q 3 ,其中 p q 是   不同的素数。例如,200 =   5 2 2 3 或120072949 = 23 2 61 3

     

前五个座位是72,108,   200,392和500。

     有趣的是,200也是第一个   您无法更改的号码   单个数字来制作素数;我们应该   称这样的数字,证明。该   包含的下一个防爆大概   连续的子串“200”是   1992008。

     

找到第200个防爆大麻   包含连续的子串   “200”。

有人可以指出我正确的方向来帮助我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

我不确定这是一个很好的问题,但这至少应该让你开始。

在算法上,对此的蛮力和无知接近应该非常简单:

  1. 从一组素数P
  2. 开始
  3. 通过查看p中所有有序对(p1,p2)生成“squbes”,p
  4. 订购此列表,调用集合S(想一想:如何在生成它们时执行此操作)
  5. 依次测试S中的每个s,寻找子串200
  6. 如果s包含“200”测试s的每一位数修改以查看它是否为素数
  7. 如果他们都不是素数,那么你就找到了一个防爆的小人。把它放在一个列表中,当你找到第200个你完成的时候。
  8. 现在更有趣的是看看你是否可以做一些不那么蛮力和无知的事情。首先,上面是否实用(假设快速素性测试)?很容易估计出它们的速度有多快,但对于那些能够满足要求的那些,还是那些含有200个的那些,你能看到任何捷径吗?

    玩得开心!