我试图在SPOJ上解决这个问题,我必须找到数字总和为素数的范围内有多少个数字。该范围可以非常大,(给出10 ^ 8的上限)。天真的解决方案超时,我只是在整个范围内循环并检查所需的条件。我似乎也找不到模式或公式。有人可以指示继续进行吗?
提前致谢...
答案 0 :(得分:5)
以下是一些提示:
希望这有帮助。
答案 1 :(得分:1)
我(严重)怀疑这种“相反”的方法是否比@ izomorphius的建议更快,但它可能会提示一些改善程序性能的想法:
1)获取2..71范围内的素数列表(你可以从任何考虑中省略1和72,因为它们都不是素数)。
2)枚举列表中每个素数的整数分区。这是一些Python code。您需要对其进行修改,以免生成无效的分区,例如包含大于9的数字的分区。
3)对于每个分区,使用0填充以生成一组8位数,然后枚举填充集的所有排列。
现在您有所需的数字列表。
答案 2 :(得分:0)
使用Eratosthenes筛子生成质数,最大总和(9 + 9 ...)。将它们放在哈希表中。然后你可以快速循环通过10 ^ 8个数字并加总它们的总和。可能有更有效的方法,但这应该足够快。