import gmpy2 from gmpy2 import mpz, next_prime from multiprocessing import Pool, cpu_count def int_to_base_n(num, base): if num == 0: return '0' digits = '' while num > 0: rem = num % base if rem < 10: digits = str(rem) + digits else: digits = chr(ord('A') + rem - 10) + digits num //= base return digits def find_prime_index(n_base_tuple): n, base = n_base_tuple num_str = int_to_base_n(n, base) current_prime = mpz(2) index = 1 num_length = len(num_str) while True: prime_str = int_to_base_n(int(current_prime), base) if num_str in prime_str: return index current_prime = next_prime(current_prime) index += 1 while len(int_to_base_n(int(current_prime), base)) < num_length: current_prime = next_prime(current_prime) index += 1 def positive_integer_prime_sequence(limit, base): n_values = list(range(1, limit + 1)) n_base_tuples = [(n, base) for n in n_values] num_processes = min(len(n_values), cpu_count()) with Pool(processes=num_processes) as pool: sequence = pool.map(find_prime_index, n_base_tuples) return sequence if __name__ == "__main__": N = 1000 # number of terms in sequence base = 2 # base in which numbers are represented print(','.join(map(str, positive_integer_prime_sequence(N, base))))