Ejemplo n.º 1
0
def solution():
    # n = 2143
    # n_max = 987654321
    # for x in range(n, n_max+1, 2):
    # if is_prime(x):
    #         if check_one_to_n(x):
    #             if is_pandigital(x):
    #                 print(x, 'is pandigital prime')
    #                 break
    # x = 987654321
    # while True:
    #     # print('checking', x)
    #     if check_one_to_n(x):
    #         print(x, 'is made of 1-n digits, each digit exactly once')
    #         if is_prime(x):
    #             print(x, 'is prime')
    #             if is_pandigital(x):
    #                 print(x, 'is pandigital prime')
    #                 break
    #     x -= 2

    max_panprime = 2143

    for n in range(9, 1, -1):
        permutes = permute_n_digits(n)
        nums = [digitlist_to_num(p) for p in permutes]
        for num in nums:
            if check_one_to_n(num):
                if is_prime(num) and is_pandigital(num):
                    if num > max_panprime:
                        max_panprime = num
        if max_panprime > 2143:
            break

    return max_panprime
Ejemplo n.º 2
0
def solution():
    permutes = permute_n_digits(9, nfirst=0)
    
    nums = [digitlist_to_num(p) for p in permutes]
    
    # filter out those starting with 0
    nums = [num for num in nums if len(str(num))==10]
    
    ans = 0
    for num in nums:
        if check_substring_divis(num):
            ans += num
    return ans
Ejemplo n.º 3
0
def check_truncatable(num):
    len_num = len(str(num))

    if (len_num < 2) or (not is_prime(num)):
        return False

    digitlist = num_to_digitlist(num)

    trun_left = []
    trun_right = []

    for i in range(1, len_num):
        trun_left.append(digitlist_to_num(digitlist[i:]))
        trun_right.append(digitlist_to_num(digitlist[:-i]))

    all_truns = set(trun_left + trun_right)
    print('all truns:', all_truns)

    for n in all_truns:
        if not is_prime(n):
            return False

    return True
Ejemplo n.º 4
0
def solution(n_fam, verbose=False):
    len_n = 2
    while True:
        n_min, n_max = get_min_max(len_n)
        
        possible_n_replaces = range(1, len_n)

        # print(n_min, n_max)
        primes = []
        for n in range(n_min+1, n_max+1):
            if is_prime(n):
                primes.append(n)
        if len(primes) == 0:
            len_n += 1
            continue
        for p in primes:
            # p_digitlist = num_to_digitlist(p)
            for nr in possible_n_replaces:
                poss_nr_idxs = list(combinations(range(len_n), nr))
                
                for nr_idxs in poss_nr_idxs:
                    if verbose:
                        print('index/indices to replace:', nr_idxs)
                    if 0 in nr_idxs:
                        r_digits = range(1, 10)
                    else:
                        r_digits = range(0, 10)
                    
                    prime_family = []
                    
                    for r in r_digits:
                        p_replist = num_to_digitlist(p)
                        for nr_idx in nr_idxs:     
                            # print(nr_idx, r)
                            p_replist[nr_idx] = r
                        p_rep_num = digitlist_to_num(p_replist)
                        if is_prime(p_rep_num):
                            prime_family.append(p_rep_num)
                    if verbose:
                        print(p, prime_family)
                    if len(prime_family) == n_fam:
                        # print(prime_family)
                        return min(prime_family)
        len_n += 1
Ejemplo n.º 5
0
def convert_base(num_base10, base_to):
    # find max_pow
    imax = 0
    while base_to ** imax <= num_base10:
        # print(base_to ** imax, num_base10)
        imax += 1
    
    imax -= 1
        
    # print('max power in base {}: {}'.format(base_to, imax))

    new_digitlist = []
    for i in range(imax, -1, -1):
        # print('finding power', imax)
        digit = num_base10 // (base_to ** i)

        if digit != 0:
            num_base10 = num_base10 - (digit) * (base_to ** i)
        
        new_digitlist.append(digit)

    new_num = digitlist_to_num(new_digitlist)

    return new_num
Ejemplo n.º 6
0
def permutes_of_num(num):
    digitlist = num_to_digitlist(num)
    permutes = list(permutations(digitlist))
    permute_nums = [digitlist_to_num(p) for p in permutes]
    return permute_nums