Я пытаюсь оптимизировать свой код для работы в кластере hadoop. Может ли кто-нибудь помочь мне найти способы сделать это лучше? Я беру в очень большом наборе номеров более 40 миллионов, и каждый номер находится на новой линии. Когда числа читаются, я подсчитываю каждое число, суммируя все числа, а также проверяя каждое число, чтобы увидеть, является ли оно простым.Функция карты, которая должна быть быстрее
#!/usr/bin/env python
import sys
import string
import math
total_of_primes = 0
total = 0
count = 0
not_prime = 0
count_string = 'Count:'
total_string = 'Total:'
prime_string = 'Number of Primes:'
for line in sys.stdin:
try:
key = int(line)
except:
continue
total = total + key
count = count + 1
if key == 2 or key == 3:
not_prime = not_prime - 1
elif key%2 == 0 or key%3 == 0:
not_prime = not_prime + 1
else:
for i in range(5,(int(math.sqrt(key))+1),6):
if key%i == 0 or key%(i+2) ==0:
not_prime = not_prime + 1
break
total_of_primes = count - not_prime
print '%s\t%s' % (count_string,count)
print '%s\t%s' % (total_string,total)
print '%s\t%s' % (prime_string,total_of_primes)
Почему бы вы * уменьшить * количество составных чисел, когда вы видите 2 или 3? – user2357112
2 и 3 - оба простых числа, однако 1 не является. –
Да, но если входные данные - это только два числа 2 и 3, вы видели отрицательные два составных числа? – user2357112