私はプロジェクトオイラーの問題を解決し、ここproblem 35のための私のコードでてきました。なぜValueErrorは同一のコードでも、他のコードでは取得できないのですか?
def sieve_of_Erathosthenes():
sieve = [True] * 10**6
def mark(sieve, x):
for i in xrange(x+x, len(sieve), x):
sieve[i] = False
for x in xrange(2, int(len(sieve) ** 0.5) + 1):
if sieve[x]:
mark(sieve, x)
return list(str(i) for i in range(2, len(sieve)) if sieve[i])
def is_prime(n):
from math import sqrt
if all(n % i != 0 for i in xrange(2,int(sqrt(n))+1)):
return True
def is_circular_prime(p):
if all(is_prime(int(p[i:] + p[:i])) for i in xrange(len(p))):
return True
primes = sieve_of_Erathosthenes()
number_of_circular_primes = 0
for i in primes:
if is_circular_prime(i):
number_of_circular_primes += 1
print number_of_circular_primes
それは私が意図したのと同様に動作し、正しい解を出力します。私は同様のアプローチを使用してproblem 37を解決しましたが、 "ValueError:基数10のint()のリテラルが無効です。" "すべてを試しましたが、それでも動作しませんでした。ここに私のコードです:
def sieve_of_Erathosthenes():
sieve = [True] * 10**5
def mark(sieve, x):
for i in xrange(x+x, len(sieve), x):
sieve[i] = False
for x in xrange(2, int(len(sieve) ** 0.5) + 1):
if sieve[x]:
mark(sieve, x)
return [str(i) for i in range(2, len(sieve)) if sieve[i] and i > 10]
def is_prime(n):
from math import sqrt
if all(n % i != 0 for i in xrange(2,int(sqrt(n))+1)):
return True
def is_trunctable_from_the_right(n):
if all(is_prime(int(n[:i])) for i in range(len(n)-1)):
return True
def is_trunctable_from_the_left(n):
if all(is_prime(int(n[i:])) for i in range(1,len(n))):
return True
primes = sieve_of_Erathosthenes()
trunctable_from_both_sides = 0
for i in primes:
if is_trunctable_from_the_left(str(i)) and is_trunctable_from_the_right(str(i)):
trunctable_from_both_sides += int(i)
print trunctable_from_both_sides
ここからわかるように、ここのコードのほとんどは、以前の問題からコピーされ貼り付けられています。なぜ今はうまくいかないのですか?これをどうやって解決するのですか?