0

I am trying to use python to solve Project Euler's questions.

The question i met is to add to all prime number below 2 millions.

My codes:

import math

def isPrime(number):
if number == 2:
    return True
for x in range(2,number):
    if number % x ==0:
        return False
return True

number = 3
ans = 2 
while number<=2000000:
    if(isPrime(number)):
       print(number)
       ans+=number
    number+=2

I think it is working, however it is processing too slow. Is there any way to enhance it? (Without using a prime number set in memory). Thank you!

Pham Trung
  • 10,784
  • 2
  • 20
  • 41
tung yu
  • 64
  • 4

2 Answers2

1
def is_prime(number):
  if number == 2:
    return True
  for x in range(2, int(math.sqrt(number)) + 1):
    if number%x == 0:
      return False
  return True

If you ensure there's no number till square root of given number which can divide the given number, then you can mark it prime. No need to check till number - 1. Although a small improvement, could be significant in your case.

ravi
  • 10,474
  • 1
  • 12
  • 30
0

Run your loop up to the square root of the number. This will reduce the complexity.

Rajat Jain
  • 1,155
  • 2
  • 12
  • 28