【发布时间】:2022-12-21 04:25:35
【问题描述】:
我正在尝试解决 Codewars kata,该代码适用于小数字,但大数字运行太多并在 12 秒后停止。代码必须返回[n个以下的纯奇数素数,小于n的最大纯奇数素数,大于n的最小纯奇数素数]。我如何优化才能运行得更快?
def only_oddDigPrimes (n): # P.O.D.P (pure ood digit prime)
prime, primeodd, result = [], [], []
i = 2
loop = True
while loop:
for j in range(2, i):
if i % j == 0:
break
else:
if i < n:
for a in range(len(str(i))):
if int(str(i)[a]) % 2 == 0:
break
else:
prime.append(i)
if i > n:
for b in range(len(str(i))):
if int(str(i)[b]) % 2 == 0:
break
else:
result.append(i)
loop = False
i = i + 1
for i in prime:
if int(str(i)[0]) % 2 != 0 and i < n:
primeodd.append(i)
result.insert(0, primeodd[-1])
result.insert(0, len(primeodd))
print(result)
return result
【问题讨论】:
-
“纯”奇数的定义是什么?根据定义,素数是奇数,因为任何偶数都可以被 2 整除?
-
要优化您的代码,请考虑如何替换 ``` for j in range(2, i) ``` 循环,因为我认为这是您基本效率低下的原因。
-
纯奇数,表示结果数中没有偶数。比如23就不好,因为2是偶数。关于优化。是的,我认为这是问题所在,但在我看来,现在没有任何其他解决方案来检查质数。
-
查看 fastest-way-to-list-all-primes-below-n 以获取列出所有小于特定数字的素数的方法
标签: python-3.x