Files
contests/35/main.py

58 lines
1.2 KiB
Python

'''
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?
'''
import math
import numpy as np
def sieve(n):
assert n > 1
ns = [True] * n
for i in range(2, math.ceil(np.sqrt(n))):
if ns[i]:
j = pow(i, 2)
while j < n:
ns[j] = False
j = j + i
return [i for i,val in enumerate(ns) if val][2:]
def rotate(n):
if n < 10:
return n
else:
l = n % 10
return l * 10**(len(str(n)) - 1) + n // 10
def isCircular(p, primes):
result = True
cur = rotate(p)
while cur != p:
if cur not in primes:
result = False
break
cur = rotate(cur)
return result
def main():
print("Hello this is Patrick")
primes = sieve(1000000)
res = 0
for p in primes:
if isCircular(p, primes):
print(p)
res += 1
print("Number of circular primes:", res)
if __name__ == "__main__":
main()