我试图解决问题41,但我不知道为什么我的代码停在987654319:
def IsPandigital(No):
a = sorted(str(No))
for i in range(1,10):
if a[i - 1] != str(i):
return False
return True
def IsPrime(No):
i = 2
while i < No:
if No % i == 0:
return False
i += 1
return True
i = 987654321
while i > 0:
print i
raw_input()
if IsPrime(i) == True and IsPandigital(i) == True:
print i
break
i -= 1
print i
print "EOP"
raw_input()
Run Code Online (Sandbox Code Playgroud)
PS:我知道我应该从799999999开始,因为:
GergS:每9位数和8位数的pandigital数可被3整除.
zvo*_*one 10
你的IsPrime功能非常慢.它可以快速计算,987654321是可分3和987654320可划分由二,然而,987654319是素数,它需要非常非常长,检查其对所有除数如此看来,如果它停止.
这个问题需要的不仅仅是简单的计算,就像你所做的那样.计算素数是一个缓慢的过程,因此您应该对其进行优化,例如:
IsPandigital之前测试IsPrime,[987654321,987654312,987654231,987654213,...]while i <
No- 它足以达到目标
sqrt(No).你的其他问题:
| 归档时间: |
|
| 查看次数: |
2804 次 |
| 最近记录: |