【发布时间】:2015-11-07 00:10:49
【问题描述】:
我试图尝试欧拉项目的第 35 个问题 (click here)。问题是这样的:
数字 197 被称为圆素数,因为数字 197、971 和 719 的所有旋转本身都是素数。
100 以下的素数有 13 个:2、3、5、7、11、13、17、31、37、71、73、79 和 97。
一百万以下的圆素数有多少?
所以我用前一百万个数字创建了一个筛子,以得到一百万以下的所有素数,并用它来比较素数的旋转结果。
arr = []
for i in range(2, len(sieve)):
if sieve[i]:
sub_arr = retCircular(i)
count = len(sub_arr)
carry = 0
for j in sub_arr:
if sieve[j]:
carry += 1
sieve[j] = False
else:
break
if carry == count:
for j in sub_arr:
arr.append(j)
print "Number of circular primes =", len(arr)
这个程序将 100 万以下的圆素数的数量设为 54,而实际答案是 55。有人可以帮我解决我哪里出错了吗?
注意:
- retCircular(n) 是一个用户定义的函数,它返回数组中数字的所有循环形式。
- 'sieve' 是一个布尔值数组,在所有主要位置索引处包含 True,在所有复合位置索引处包含 False。
P/S,如果有人有更好的方法来解决这个问题,请告诉我!
【问题讨论】:
-
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布代码并准确描述问题之前,我们无法有效地帮助您。特别是,我们需要代码来重现问题。我们还可以使用您的逻辑和数据痕迹——您缺少哪个素数?
-
在循环之前添加:
print sieve[2]。如果答案是3,则您跳过了第一个素数。 -
考虑如果您的初始素数(在测试循环之前)包含任何数字 0、2、4、5、6、8 会发生什么。请注意单数素数 2 和 5 .
标签: python algorithm project primes