Project Euler 질문으로 돌아가서 코드 속도를 높일 수 있는지 알아 보려면 003 : 정말 큰 숫자의 최대 소수점 찾기.왜 이것이 소수의 소수를 통과하게합니까?
def is_prime(n):
'''check if n is prime'''
if n == 1: return 0
elif n == 2: return 1
elif n % 2 == 0: return 0
for i in range(3, int(n**0.5) +1, 2):
if n % i == 0:
return 0
else:
return 1
factor_list = []
the_number = 600851475143
for i in range(3, int(the_number**0.5) +1, 2):
if the_number % i == 0: factor_list.append(i)
print factor_list
for i in factor_list:
if is_prime(i) == False: factor_list.remove(i)
print factor_list
print max(factor_list)
첫 번째 인쇄 호출 인쇄 : [71, 839, 1471, 6857, 59569, 104441, 486847]
지금까지 N의 사전 N^0.5 요인을 인쇄, 너무 좋아.
두 번째 인쇄 호출이 인쇄됩니다. [71, 839, 1471, 6857, 104441]
잠깐, 어떻게 104441이 is_prime 함수를 통과 했습니까?
세 번째 인쇄 호출은 잘못된 대답, 즉 104441을 인쇄합니다. 제 질문은 어떻게 104441이 미끄러 져 나오는지입니다.
왜'is_prime'은'True' 또는'False' 대신'0' 또는'1'을 리턴합니까? 그러면 출력을'거짓 '과 비교하여 왜 검사하고 있습니까? – murgatroid99
@murgatroid 0은 거짓이고 0이 아닌 값이 모두 참이면 동의어입니다. 사실 부울 값을 반환하는 연산은 0 또는 1을 반환합니다. 또한이 함수는 10441이 통과하지 못하게할지 여부에 영향을주지 않습니다. – mistersister
0은 부울로 강제 변환 될 때를 제외하고는 거짓이 아닙니다. 그들은 평등하지 않습니다. 이것은 C가 아닙니다. 그리고 처음 질문을 읽을 때 문제가 될 것이라고 생각했습니다. – murgatroid99