We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
n = N_input
N = N_input - 1 if N_input in [10**_ for _ in range(3, 7)] else N_input
SIEVE_LIMIT = 10**(len(str(N)))-1
primes_sieve_array = [0] * (SIEVE_LIMIT + 1) # 0 for prime, 1 for composite
for i in range(2, len(primes_sieve_array)):
if not primes_sieve_array[i] == 0:
continue
for j in range(i * 2, len(primes_sieve_array), i):
primes_sieve_array[j] = 1
def rootval(num_val):
s = 1
temp_num = num_val
if temp_num == 0:
s *= code_p[0]
else:
while temp_num > 0:
s *= code_p[temp_num % 10]
temp_num //= 10
return s
primes_d = OrderedDict()
k_vals = OrderedDict()
for j in (i_prime_candidate for i_prime_candidate in range(2, len(primes_sieve_array)) if primes_sieve_array[i_prime_candidate] == 0 and i_prime_candidate >= 1487):
if j < n:
k_vals[j] = {}
val = rootval(j)
if val not in primes_d:
primes_d[val] = [j]
else:
for k in primes_d[val]:
if k in k_vals:
for x in k_vals[k]:
if (j - k) % x == 0:
k_vals[k][x].append((j - k) // x)
if j - k not in k_vals[k]:
k_vals[k][j - k] = [1]
primes_d[val].append(j)
for i_start_prime in k_vals:
if len(k_vals[i_start_prime]) < K - 1:
continue
for common_diff_val in sorted(set(k_vals[i_start_prime].keys())):
try:
if k_vals[i_start_prime][common_diff_val][K - 2] == K - 1:
print(*[i_start_prime + (x * common_diff_val) for x in range(K)], sep='')
except IndexError as e:
pass
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Project Euler #49: Prime permutations
You are viewing a single comment's thread. Return to all comments →
from collections import OrderedDict, defaultdict from math import sqrt
code_p = {0: 2, 1: 3, 2: 5, 3: 7, 4: 11, 5: 13, 6: 17, 7: 19, 8: 23, 9: 29}
N_input, K = map(int, input().split())
n = N_input N = N_input - 1 if N_input in [10**_ for _ in range(3, 7)] else N_input
SIEVE_LIMIT = 10**(len(str(N)))-1 primes_sieve_array = [0] * (SIEVE_LIMIT + 1) # 0 for prime, 1 for composite
for i in range(2, len(primes_sieve_array)):
def rootval(num_val): s = 1 temp_num = num_val if temp_num == 0: s *= code_p[0] else: while temp_num > 0: s *= code_p[temp_num % 10] temp_num //= 10 return s
primes_d = OrderedDict() k_vals = OrderedDict()
for j in (i_prime_candidate for i_prime_candidate in range(2, len(primes_sieve_array)) if primes_sieve_array[i_prime_candidate] == 0 and i_prime_candidate >= 1487):
for i_start_prime in k_vals: if len(k_vals[i_start_prime]) < K - 1: continue