mu chance or much chance ?

日々の戯れ言

Project Euler 35

  • 問題

Problem 35:Circular primes
The number, 197, is called a circular prime because all rotations of the digits: 197, 971, and 719, are themselves prime.

There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97.

How many circular primes are there below one million?

  • 解答例
def sieveEratosthenes(num):
    isPrime = [True] * (num + 1)
    isPrime[0] = False
    isPrime[1] = False
    primes = []
    for i in range(2, (num + 1)):
        if isPrime[i]:
            primes.append(i)
            for j in range(2 * i, (num + 1), i):
                isPrime[j] = False
    return primes

def isPrime(num):
    if num <= 1:
        return False
    elif num == 2 or num == 3:
        return True
    if num % 2 == 0 or num % 3 == 0:
        return False
    if not(num % 6 == 1) and not(num % 6 == 5):
        return False
    i = 5
    while i * i <= num:
        if num % i == 0 or num % (i + 2) == 0:
            return False
        i += 6
    return True

prime = sieveEratosthenes(999999)
circularPrime = []

for n in prime:
    temp = list(str(n))
    l = len(temp)
    isCircularPrime = True
    for i in range(l - 1):
        tempChar = temp.pop(0)
        temp.append(tempChar)
        tempNum = int("".join(temp))
        if not isPrime(tempNum):
            isCircularPrime = False
            break
    
    if isCircularPrime:
        circularPrime.append(n)

print(len(circularPrime))