def circular_prime(number): global number_list result = True number_str = str(number) for i in range(1, len(number_str)): rotated_str = number_str[i:] + number_str[:i] rotated_nr = int(rotated_str) if not number_list[rotated_nr-1]: result = False break return result limit = 1000000 number_list = [False] for i in range(2, limit+1): number_list.append(True) for i in range(2, limit+1): x = i*2 while(x <= len(number_list)): number_list[x-1] = False x += i count = 0 for i in range(1, limit+1): if number_list[i-1] and circular_prime(i): count += 1 print count