Skip to content

Instantly share code, notes, and snippets.

@mrdjohnson
Last active October 16, 2016 08:22
Show Gist options
  • Select an option

  • Save mrdjohnson/f009f21072dd67637e015d7a4406ab33 to your computer and use it in GitHub Desktop.

Select an option

Save mrdjohnson/f009f21072dd67637e015d7a4406ab33 to your computer and use it in GitHub Desktop.
A close win for finding the sum of the sum of all prime factors from 2-N the fastest
# @timeit
# the original one
def get_prime_factor_sum(row):
total = 0
primes = {}
for prime_number in range(2, row + 1):
if prime_number in primes:
continue
next_exponent = prime_number
for prime_multiple in range(prime_number, row + 1, prime_number):
if prime_multiple not in primes:
primes[prime_multiple] = False
if prime_multiple == next_exponent:
total += prime_number * (row // prime_multiple)
next_exponent *= prime_number
return total
# the newer better version
def get_prime_factor_sum_2(row):
total = handle_evens(row)
primes = {}
for prime_number in range(3, row + 1, 2):
if prime_number in primes:
continue
next_exponent = prime_number
step = prime_number * 2
for prime_multiple in range(prime_number, row + 1, step):
if prime_multiple not in primes:
primes[prime_multiple] = False
if prime_multiple == next_exponent:
total += prime_number * (row // prime_multiple)
next_exponent *= prime_number
return total
def handle_evens(row):
next_exponent = 2
total = 0
while next_exponent <= row:
total += 2 * (row // next_exponent)
next_exponent *= 2
return total
print(get_prime_factor_sum_2(1000000))
#broken_bitset_attempt
def get_prime_factor_sum_3(row):
total = handle_evens(row)
primes = 0
for prime_number in range(3, row + 1, 2):
if (prime_number & ( 1 << primes)) > 0:
continue
next_exponent = prime_number
step = prime_number * 2
for prime_multiple in range(prime_number, row + 1, step):
if (prime_multiple & ( 1 << primes)) > 0:
primes |= (1 << prime_multiple)
if prime_multiple == next_exponent:
total += prime_number * (row // prime_multiple)
next_exponent *= prime_number
return total
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment