By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10 001st prime number?

  • 10001번째 소수를 찾는 문제이다!

  • 소수를 찾기위해서 n을 1~n까지 나눠봤다!

    @check_time
    def euler007(number = 10001):
        primeList   = [2,] 	
        num         = 3
        flag        = True
    
        while(len(primeList) < number):
            for n in primeList:			
                if (num % n == 0):
                    flag = False
                    break;
                if (n * 2 > num):
                    break
            if(flag == False):
                flag = True
            else:
                primeList.append(num);
                flag = True
            num += 2
    
    
  • 반복문이 비효율적으로 중첩되어 있으므로 알고리즘을 고쳐보았다.

    def is_prime(x):
        if x <=3:
            if x<=1:
                return False
            return True
        if not x%2 or not x%3:
            return False
        for i in range(5, int(x**0.5)+1, 6):
            if not x%i or not x%(i+2):
                return False
        return True
    
    def euler007a(num=10000):
        l = 0
        n = 1
    
        if num < 2:
            return 0
        if num == 2:
            return 1
        while l < num:
            n += 2
            if is_prime(n):
                l += 1
        return n
    

    ```

  • 초반에 구할수 있는 소수를 최대한 구한 다음 탐색의 step을 넓혔다!

    ```