【发布时间】:2019-01-31 22:34:43
【问题描述】:
数字 197 被称为圆素数,因为数字的所有旋转:197、971 和 719 本身都是素数。
100 以下的素数有 13 个:2、3、5、7、11、13、17、31、37、71、73、79 和 97。
一百万以下有多少个圆素数?
我正在尝试做 Project Euler #35,但在想出一个不实现任何外部库或筛子算法的解决方案时遇到了麻烦。
为了尽量保持基本,我创建了一些函数来旋转一个数字并检查它是否是素数。尝试组合这两个函数后,我遇到了数据类型问题,并且在管理 int 和 strs 之间的数据类型时遇到了麻烦,因为它们与我用来存储每次旋转的列表对象相关。
我的代码:
def is_prime(n):
m = int(n)
for i in range(2,m-1):
if (m%i) == 0:
return False
return (True if m>1 else False)
def rotate(n):
list = []
string = str(n)
for i in string:
front = string[0]
rest = string[1:]
complete = rest + front
list.append(complete)
string = complete
return list
def rotations(num):
numString = str(num)
counter = 0
while counter < len(numString):
for i in numString:
rotater = rotate(i)
if is_prime(rotater) in numString == True:
counter+=1
return counter
print(rotations(1000))
按原样返回:
Traceback (most recent call last):
File "/tmp/785402618/main.py", line 29, in <module>
print(rotations(1000))
File "/tmp/785402618/main.py", line 25, in rotations
if is_prime(rotater) in numString == True:
File "/tmp/785402618/main.py", line 2, in is_prime
m = int(n)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
我该如何解决这个问题?
【问题讨论】:
-
有什么错误?
-
嗨!欢迎来到堆栈溢出。你有什么问题?
-
is_prime(rotater)返回True/False。if is_prime(rotater) in numString == True:应该检查什么? -
正如@Carcigenicate 所说,如果
Boolean in Boolean作为in比较的一部分返回True/False,那么评估是没有意义的。 -
您可以找到更多寻找“python 旋转字符串”的答案。对于 euler 项目,最好自己弄清楚数学。通常是为了找到更有效的方法。现在你会检查 is_prime 太多,而且它也不是最有效的。
标签: python