예제 #1
0
파일: jaeschke.py 프로젝트: pchelkanat/spsp
def screen_by_t(a_base, B, t, equal_list):
    clearfile(f"lib/{B}/{t}/t_signs_{t}_{B}.txt")

    ### Посчет времени работы
    start_time = time.time()
    ###

    screening_list = []
    for item in equal_list:  # item - простые числа с одинаковой сигнатурой
        if len(item.primes) >= t - 1 and item.primes[0] > a_base[-1]:
            # берем больше, так как позже будем проверять по группам p1*p2*...*p(t-1)^2<B
            combine = combinations(item.primes, t - 1)  # в порядке возрастания
            for prms in combine:
                prod = np.prod(prms) * prms[-1]
                if prod < B:
                    screening_list.append(Signature(item.sign, prms))

    ###
    total_time = "--- %s seconds ---\n" % (time.time() - start_time)
    ###

    ### Запись в файл
    for j in range(len(screening_list)):
        s = f"{j}    {screening_list[j].sign}     {screening_list[j].primes}\n"
        writefile(f"lib/{B}/{t}/t_signs_{t}_{B}.txt", s)
    writefile(f"lib/{B}/{t}/t_signs_{t}_{B}.txt", total_time)

    return screening_list
예제 #2
0
def step1(a_base, primes):
    clearfile(f"lib/mu/{a_base}/total_time.txt")
    ### Посчет времени работы
    start_time = time.time()
    ###
    primes_dict = {}
    for prime in primes[len(a_base):]:
        mu = Mu_p(a_base, prime)
        print(prime, mu)
        # if mu == 1:
        #    continue
        if mu in primes_dict.keys():
            primes_dict[mu].append(prime)
        else:
            primes_dict[mu] = [prime]

    ###
    total_time = "--- %s seconds ---\n" % (time.time() - start_time)
    ###

    tot_s = total_time
    writefile(f"lib/mu/{a_base}/total_time.txt", tot_s)

    for item in primes_dict:
        clearfile(f"lib/mu/{a_base}/mu_{item}.txt")
        s = ''.join(
            str(l) + ' ' + '\n' * (n % 8 == 7)
            for n, l in enumerate(primes_dict[item]))
        writefile(f"lib/mu/{a_base}/mu_{item}.txt", s)

    return primes_dict
예제 #3
0
def step0(Q11):
    clearfile(f"lib/free_sqr.txt")
    start_time = time.time()
    free_sqr = []
    for n in range(3, Q11, 2):
        print(n)
        arr = numth.factorization(n)
        power = 1
        for i in range(len(arr)):
            power *= arr[i][1]
        if power == 1:
            free_sqr.append(n)
            writefile(f"lib/free_sqr.txt", f"{n} ")
    total_time = "\n--- %s seconds ---\n" % (time.time() - start_time)
    writefile(f"lib/free_sqr.txt", total_time)

    return free_sqr
예제 #4
0
파일: jaeschke.py 프로젝트: pchelkanat/spsp
def t_2(a_base, B, primes_list):
    clearfile(f"res/jae/2/{a_base}/spsp_{B}.txt")
    spsp = []
    ### Посчет времени работы
    start_time = time.time()
    ###
    i = 1
    for p in primes_list:
        if p < int(root(B, 2)):
            if p > a_base[-1]:
                lmd_p = Lambda_p(a_base, p)
                lmd = numth.lcm(lmd_p, 2)
                for k in range(int(1 + (p - 1) / lmd),
                               int((B - p) / (p * lmd)) + 1, 1):
                    q = 1 + k * lmd
                    if p * q <= B:  # and p * q > B // 100:
                        if numth.is_prime(q) and q > p:
                            if q + 1 == 2 * p:
                                if check_signs(a_base, [p, q]) and psp_2(
                                        a_base, [p, q]):
                                    item = Signature(Sign(a_base, p), [p, q])
                                    s = f"{i}    {np.prod(item.primes)}    {item.primes}    {item.sign}\n"
                                    writefile(
                                        f"res/jae/2/{a_base}/spsp_{B}.txt", s)
                                    i += 1
                                    spsp.append(item)
                                else:
                                    continue

                            else:
                                P = p * (1 + k * lmd)
                                if psp(a_base, P) and check_signs(
                                        a_base, [p, q]):
                                    item = Signature(Sign(a_base, p), [p, q])
                                    s = f"{i}    {np.prod(item.primes)}    {item.primes}    {item.sign}\n"
                                    writefile(
                                        f"res/jae/2/{a_base}/spsp_{B}.txt", s)
                                    i += 1
                                    spsp.append(item)
                    # else:
                    # break
    ###
    total_time = "--- %s seconds ---\n" % (time.time() - start_time)
    ###
    writefile(f"res/jae/2/{a_base}/spsp_{B}.txt", total_time)
    return spsp
예제 #5
0
파일: jaeschke.py 프로젝트: pchelkanat/spsp
def t_more_3(a_base, B, t, primes_list):
    clearfile(f"res/jae/{t}/{a_base}/spsp_{B}.txt")
    spsp = []
    ### Посчет времени работы
    start_time = time.time()
    ###
    i = 1
    equal_list = parsefile(f"lib/equal/{a_base}/equal_signs.txt")

    for item in equal_list:  # item - простые числа с одинаковой сигнатурой
        if len(item.primes) >= t - 1 and item.primes[0] > a_base[-1]:
            # берем больше, так как позже будем проверять по группам p1*p2*...*p(t-1)^2<B
            combine = combinations(item.primes, t - 1)  # в порядке возрастания
            for prms in combine:
                prod = np.prod(prms)
                if prod * prms[-1] < B:
                    a = a_base[0]
                    mu = Lambda_list([a], prms)
                    if gcd(mu, prod) > 1:
                        continue
                    else:
                        import gmpy2
                        c = gmpy2.powmod(prod, -1, mu)
                        for pt in primes_list:
                            if pt > prms[
                                    -1] and pt <= B / prod and pt % mu == c:
                                if psp(a_base, pt * prod) and check_signs(
                                        a_base, [pt, prms[-1]]):
                                    item = Signature(Sign(a_base, pt),
                                                     prms + [pt])
                                    s = f"{i}    {np.prod(item.primes)}    {item.primes}    {item.sign}\n"
                                    writefile(
                                        f"res/jae/{t}/{a_base}/spsp_{B}.txt",
                                        s)
                                    i += 1
                                    spsp.append(item)

                else:
                    break  # к другому item'у т.к. combine упорядочен вертикально и горизонтально

    ###
    total_time = "--- %s seconds ---\n" % (time.time() - start_time)
    ###
    writefile(f"res/jae/{t}/{a_base}/spsp_{B}.txt", total_time)
    return spsp
예제 #6
0
파일: jaeschke.py 프로젝트: pchelkanat/spsp
def find_equal_signs(a_base, primes_list):
    clearfile(f"lib/equal/{a_base}/equal_signs.txt")
    clearfile(f"lib/equal/{a_base}/total_time.txt")

    ### Посчет времени работы
    start_time = time.time()
    ###
    signs_list = [
    ]  # так как нельзя вернуть словарь с ключом-списком, заводим список сигнатур
    primes_dict = {}  # ключами являются индексы в списке сигнатур
    for prime in primes_list[len(a_base):]:
        print("finding equal ... %s" % (prime))
        sign = Sign(a_base, prime)
        if sign in signs_list:
            primes_dict[signs_list.index(sign)].append(prime)
        else:
            signs_list.append(sign)
            primes_dict[signs_list.index(sign)] = [prime]
    ###
    total_time = "--- %s seconds ---\n" % (time.time() - start_time)
    ###

    ### Преобразование по классу
    equal_list = []
    for j in range(len(signs_list)):
        temp = Signature(signs_list[j], primes_dict[j])
        equal_list.append(temp)

    ###Запись в файл
    tot_s = total_time
    writefile(f"lib/equal/{a_base}/total_time.txt", tot_s)

    s = ""
    for j in range(len(signs_list)):
        s += f"{j}    {equal_list[j].sign}     {equal_list[j].primes}\n"
    writefile(f"lib/equal/{a_base}/equal_signs.txt", s)

    return equal_list
예제 #7
0
def main():

    # Delete bought.csv file
    print(clearfile('sold.csv'))

    # Add items to sell.csv
    print('\nBanana sold:', sell('Banana', '2021-02-04', 3))
    print('Orange sold:', sell('Orange', '2021-01-02', 2))
    print('Peer   sold:', sell('Peer', '2021-02-04', 4))

    # Check sold with dates
    print('\nSold before 2021-01-03:\n', read_sold('2021-01-05'))
    print('\nSold in February:\n', read_sold('2021-02'))

    return
예제 #8
0
def main():

    # Delete bought.csv file
    print(clearfile('bought.csv'))

    # Add items to bought.csv
    print('\nBanana added:', buy('Banana', '2021-01-08', 3, '2021-01-15'))
    print('Orange added:', buy('Orange', '2021-01-01', 3, '2021-01-10'))
    print('Apple  added:', buy('Apple', '2021-01-01', 2, '2021-01-10'))
    print('Peer   added:', buy('Peer', '2021-01-01', 4, '2021-01-12'))
    print('Peer   added:', buy('Peer', '2021-01-03', 4, '2021-02-15'))

    # Check bought with dates
    print('\nBought before 2021-01-03:\n', read_bought('2021-01-03'))
    print('\nBought in January:\n', read_bought('2021-01'))

    return
예제 #9
0
def step_t_4(a_base, B):
    clearfile(f"res/jnd/4/{a_base}/spsp_{B}.txt")
    clearfile(f"res/jnd/4/{a_base}/n_list_{B}.txt")
    n_list = []

    ### Посчет времени работы
    start_time = time.time()
    ###

    equal_3_list = parsefile(f"res/jnd/3/{a_base}/n_list_{B}.txt")
    # упорядочены по возрастанию p1, где p1<p2
    if len(equal_3_list) != 0:
        for i in range(len(equal_3_list)):
            p1 = equal_3_list[i].primes[0]
            p2 = equal_3_list[i].primes[1]
            p3 = equal_3_list[i].primes[2]
            b = int(p1 * p2 * p3)
            if p1 <= int(root(B, 4)) and b * p3 < B:
                s = ""
                if p1 % 4 == 3:  # Вместо сигнатур вычисляется символ Лежандра
                    p4_3k4 = readfile("primes/4k+3.txt")
                    for p4 in p4_3k4:
                        if p4 * b <= B:  # and p4 * b > B // 100:
                            if p4 > p3:
                                f"p4 {p4}"
                                signss = check_signs(a_base, [p1, p4])
                                if signss:
                                    item = Signature(Sign(a_base, p1),
                                                     [p1, p2, p3, p4])
                                    s += f"{item.primes}    {signss}    {item.sign}\n"
                                    n_list.append(item)

                else:
                    p_exist = np.array([p1, p2, p3])
                    p4_list = next_p(p_exist, a_base, B)
                    if isinstance(p4_list, list):
                        for p4 in p4_list:
                            if p4 * b <= B:  # and p4 * b > B // 100:
                                if p4 > p3:
                                    f"p4 {p4}"
                                    signss = check_signs(a_base, [p1, p4])
                                    if signss:
                                        item = Signature(
                                            Sign(a_base, p1), [p1, p2, p3, p4])
                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                        n_list.append(item)
                writefile(f"res/jnd/4/{a_base}/n_list_{B}.txt", s)
            else:
                continue
    i = 1
    spsp = []
    ss = ""
    for item in n_list:
        prod = np.prod(item.primes)
        if psp(a_base, prod):
            ss += f"{i}    {prod}    {item.primes}    {item.sign}\n"
            i += 1
            spsp.append(item)
    ###
    total_time = "--- %s seconds ---\n" % (time.time() - start_time)
    ###

    ss += f"{total_time}\n"
    writefile(f"res/jnd/4/{a_base}/spsp_{B}.txt", ss)
    return np.array(spsp)
예제 #10
0
def step_t_3(a_base, B):
    clearfile(f"res/jnd/3/{a_base}/spsp_{B}.txt")
    clearfile(f"res/jnd/3/{a_base}/n_list_{B}.txt")
    n_list = []

    ### Посчет времени работы
    start_time = time.time()
    ###

    # equal_2_list = parsefile(f"res/jnd/2/{a_base}/n_list_{B}.txt")
    # упорядочены по возрастанию p1, где p1<p2
    # if len(equal_2_list) != 0:
    # for i in range(len(equal_2_list)):
    # p1 = equal_2_list[i].primes[0]
    # p2 = equal_2_list[i].primes[1]
    # b = int(p1 * p2)
    for p1 in primes:
        p1 = int(p1)
        print(p1)
        if p1 <= int(root(B, 3)):  # and b * p2 < B:
            if p1 > a_base[-1]:
                print(p1)
                s = ""
                if len(a_base) > 6:
                    a_base = a_base[:6]
                leg1 = []

                for a in a_base:
                    leg1.append(numth.jacobi(a, p1))

                p2_3k4 = readfile("primes/4k+3.txt")
                p2_1k4 = readfile("primes/4k+1.txt")
                p2_5k8 = readfile("primes/8k+5.txt")
                p2_1k8 = readfile("primes/8k+1.txt")

                if p1 % 4 == 3:
                    print(f"p1 34 {p1}")
                    for p2 in p2_3k4:
                        if p2 > p1 and p2 < B and p2 < B:  # на всякий случай проверим
                            print(f"p2 34 {p2}")
                            leg2 = []
                            b = int(p1 * p2)
                            for a in a_base:
                                leg2.append(numth.jacobi(a, p2))
                            if leg1 == leg2:  # Prop.2 inverse is true
                                if b < 2 * 10**6:  # a trick
                                    gcd_23 = int(
                                        gcd(2**(b - 1) - 1, 3**(b - 1) - 1))
                                    factor_list = numth.factorization(gcd_23)
                                    for i in range(len(factor_list)):
                                        p3 = factor_list[i][0]
                                        if p3 * b <= B:  # and p3 * b > B // 100:
                                            if p3 > p2:
                                                print(f"p3 {p3}")
                                                signss = check_signs(
                                                    a_base, [p1, p3])
                                                if signss:
                                                    item = Signature(
                                                        Sign(a_base, p1),
                                                        [p1, p2, p3])
                                                    s += f"{item.primes}    {signss}    {item.sign}\n"
                                                    n_list.append(item)
                                else:
                                    p_exist = np.array([p1, p2])
                                    p3_list = next_p(p_exist, a_base,
                                                     B)  # ищем подходящие p3
                                    if isinstance(p3_list,
                                                  list) and len(p3_list) != 0:
                                        for p3 in p3_list:
                                            if p3 * b <= B:  # and p3 * b > B // 100:
                                                if p3 > p2:
                                                    print(f"p3 {p3}")
                                                    signss = check_signs(
                                                        a_base, [p1, p3])
                                                    if signss:
                                                        item = Signature(
                                                            Sign(a_base, p1),
                                                            [p1, p2, p3])
                                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                                        n_list.append(item)
                                    # else:
                                    # continue  # новый item из equal_2_list
                            # else:
                            # continue

                    for p2 in p2_1k4:
                        print(f"p2 14 to mu {p2}")
                        if Mu_p(a_base, p2) == 4:
                            pass  # переход к mu=4

                elif p1 % 8 == 5:
                    print(f"p1 58 {p1}")

                    for p2 in p2_5k8:
                        if p2 > p1 and p2 < B:
                            print(f"p2 58 {p2}")
                            if len(a_base) > 5:
                                a_base = a_base[:5]

                            leg2 = []
                            b = int(p1 * p2)
                            for a in a_base:
                                leg2.append(numth.jacobi(a, p2))
                            if leg1 == leg2:
                                p_exist = np.array([p1, p2])
                                p3_list = next_p(p_exist, a_base, B)
                                print(p3_list, type(p3_list))
                                if isinstance(p3_list,
                                              list) and len(p3_list) != 0:
                                    for p3 in p3_list:
                                        if p3 * b <= B:  # and p3 * b > B // 100:
                                            if p3 > p2:
                                                print(f"p3 {p3}")
                                                signss = check_signs(
                                                    a_base, [p1, p3])
                                                if signss:
                                                    item = Signature(
                                                        Sign(a_base, p1),
                                                        [p1, p2, p3])
                                                    s += f"{item.primes}    {signss}    {item.sign}\n"
                                                    n_list.append(item)
                                # else:
                                # continue
                            # else:
                            # continue

                    for p2 in p2_1k8:
                        if p2 > p1 and p2 < B:
                            print(f"p2 18 {p2}")
                            if p2 % 16 == 9:
                                print(f"p2 916 {p2}")
                                leg2 = []
                                b = int(p1 * p2)
                                for a in a_base:
                                    leg2.append(numth.jacobi(a, p2))
                                if np.prod(
                                        leg2
                                ) == 1 and p2 > p1:  # если все 1, то произведение 1
                                    p_exist = np.array([p1, p2])
                                    p3_list = next_p(p_exist, a_base, B)
                                    if isinstance(p3_list,
                                                  list) and len(p3_list) != 0:
                                        for p3 in p3_list:
                                            if p3 * b <= B:  # and p3 * b > B // 100:
                                                if p3 > p2:
                                                    print(f"p3 {p3}")
                                                    signss = check_signs(
                                                        a_base, [p1, p3])
                                                    if signss:
                                                        item = Signature(
                                                            Sign(a_base, p1),
                                                            [p1, p2, p3])
                                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                                        n_list.append(item)
                                    else:
                                        continue
                                else:
                                    continue

                        elif p2 % 16 == 1:
                            print(f"p2 116 to mu {p2}")
                            if Mu_p(a_base, p2) == 4:
                                pass  # переход к mu=4

                    for p2 in p2_3k4:
                        if p2 > p1 and p2 < B:  # в тексте этого нет, но на всякий случай проверим
                            print(f"p2 34 {p2}")
                            b = int(p1 * p2)
                            p_exist = np.array([p1, p2])
                            p3_list = next_p(p_exist, a_base, B)
                            # print(f"p3 list {p3_list}")
                            if isinstance(p3_list, list) and len(p3_list) != 0:
                                for p3 in p3_list:
                                    if p3 * b <= B:  # and p3 * b > B // 100:
                                        if p3 > p2:
                                            print(f"p3 {p3}")
                                            signss = check_signs(
                                                a_base, [p1, p3])
                                            if signss:
                                                item = Signature(
                                                    Sign(a_base, p1),
                                                    [p1, p2, p3])
                                                s += f"{item.primes}    {signss}    {item.sign}\n"
                                                n_list.append(item)
                            # else:
                            # continue

                elif p1 % 8 == 1:
                    print(f"p1 18 {p1} p2 any {p2}")
                    e, f = Val(2, p1 - 1), Val(2, Lambda_p(a_base, p1))

                    if len(a_base) > 5:
                        a_base = a_base[:5]
                    for p2 in primes:
                        if p2 > p1 and p2 < B and e == f:
                            if p2 % (2**(e + 1)) == (1 + 2**e) % (2**(
                                    e + 1)):  # !!!! СКОБКИ???
                                leg2 = []
                                b = int(p1 * p2)
                                for a in a_base:
                                    leg2.append(numth.jacobi(a, p2))
                                if leg1 == leg2:
                                    p_exist = np.array([p1, p2])
                                    p3_list = next_p(p_exist, a_base, B)
                                    if isinstance(p3_list,
                                                  list) and len(p3_list) != 0:
                                        for p3 in p3_list:
                                            if p3 * b <= B:  # and p3 * b > B // 100:
                                                if p3 > p2:
                                                    print(f"p3 {p3}")
                                                    signss = check_signs(
                                                        a_base, [p1, p3])
                                                    if signss:
                                                        item = Signature(
                                                            Sign(a_base, p1),
                                                            [p1, p2, p3])
                                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                                        n_list.append(item)
                                    else:
                                        continue
                                else:
                                    continue

                            elif p2 % (2**(e + 2)) == 1:
                                if Mu_p(a_base, p2) == 4:
                                    pass  # переход к mu=4

                            elif p2 % (2**(e + 2)) != 1 and p2 % (2**(
                                    e + 2)) == (1 + 2**(e + 1)) % 2**(
                                        e + 2):  # !!!! СКОБКИ???
                                leg2 = []
                                b = int(p1 * p2)
                                for a in a_base:
                                    leg2.append(numth.jacobi(a, p2))
                                if np.prod(leg2) == 1:
                                    p_exist = np.array([p1, p2])
                                    p3_list = next_p(p_exist, a_base, B)
                                    if isinstance(p3_list,
                                                  list) and len(p3_list) != 0:
                                        for p3 in p3_list:
                                            if p3 * b <= B:  # and p3 * b > B // 100:
                                                if p3 > p2:
                                                    print(f"p3 {p3}")
                                                    signss = check_signs(
                                                        a_base, [p1, p3])
                                                    if signss:
                                                        item = Signature(
                                                            Sign(a_base, p1),
                                                            [p1, p2, p3])
                                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                                        n_list.append(item)
                                    else:
                                        continue
                                else:
                                    continue

                        elif p2 > p1 and p2 < B and f < e:
                            if p2 % 2**f == p1:
                                if f == e - 1 and Mu_p(
                                        a_base,
                                        p1) == 2:  # это есть условие выше
                                    p_exist = np.array([p1, p2])
                                    p3_list = next_p(p_exist, a_base, B)
                                    b = int(p1 * p2)
                                    if isinstance(p3_list,
                                                  list) and len(p3_list) != 0:
                                        for p3 in p3_list:
                                            if p3 * b <= B:  # and p3 * b > B // 100:
                                                if p3 > p2:
                                                    print(f"p3 {p3}")
                                                    signss = check_signs(
                                                        a_base, [p1, p3])
                                                    if signss:
                                                        item = Signature(
                                                            Sign(a_base, p1),
                                                            [p1, p2, p3])
                                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                                        n_list.append(item)
                                    else:
                                        continue
                                else:
                                    continue
                            else:
                                continue

                # p1 is any in primes
                mu_4 = readfile(f"lib/mu/{a_base}/mu_4.txt")
                for p2 in mu_4:
                    if p2 > p1 and p2 < B:  # если p2 mu=4, то не обязательно чтобы и p1 mu=4
                        print(f"p2 mu4 {p2}")
                        p_exist = np.array([p1, p2])
                        p3_list = next_p(p_exist, a_base, B)
                        b = int(p1 * p2)
                        if isinstance(p3_list, list) and len(p3_list) != 0:
                            for p3 in p3_list:
                                if p3 * b <= B:  # and p3 * b > B // 100:
                                    if p3 > p2:
                                        print(f"p3 {p3}")
                                        signss = check_signs(a_base, [p1, p3])
                                        if signss:
                                            item = Signature(
                                                Sign(a_base, p1), [p1, p2, p3])
                                            s += f"{item.primes}    {signss}    {item.sign}\n"
                                            n_list.append(item)
                        # else:
                        # continue
                writefile(f"res/jnd/3/{a_base}/n_list_{B}.txt", s)
            else:
                continue

        else:
            break

    i = 1
    spsp = []
    ss = ""
    for item in n_list:
        prod = np.prod(item.primes)
        if psp(a_base, prod):
            ss += f"{i}    {prod}    {item.primes}    {item.sign}\n"
            i += 1
            spsp.append(item)
    ###
    total_time = "--- %s seconds ---\n" % (time.time() - start_time)
    ###

    ss += f"{total_time}\n"
    writefile(f"res/jnd/3/{a_base}/spsp_{B}.txt", ss)
    return np.array(spsp)
예제 #11
0
def step_t_2(a_base, B, primes_list):
    clearfile(f"res/jnd/2/{a_base}/spsp_{B}.txt")
    clearfile(f"res/jnd/2/{a_base}/n_list_{B}.txt")
    n_list = []
    ### Посчет времени работы
    start_time = time.time()
    ###
    for p1 in primes_list:
        p1 = int(p1)

        if p1 < int(root(B, 2)):
            if p1 > a_base[-1]:

                s = ""
                if p1 < 10**6:
                    gcd_23 = int(gcd(2**(p1 - 1) - 1, 3**(p1 - 1) - 1))
                    factors = sorted(numth.factorization(gcd_23))
                    for i in range(len(factors)):
                        p2 = factors[i][0]
                        if p2 * p1 <= B:  # and p1 * p2 > B // 100:
                            if p2 > p1:  # В дальнейшем для того, чтобы числа в интервалах не повторялись
                                signss = check_signs(a_base, [p1, p2])
                                if signss:
                                    item = Signature(Sign(a_base, p1),
                                                     [p1, p2])
                                    s += f"{item.primes}    {signss}    {item.sign}\n"
                                    n_list.append(item)
                        # else:
                        # break
                elif p1 > 10**8:
                    lmd_p = Lambda_p(a_base, p1)  # lmd_p = p1-1
                    p2 = 1

                    while p2 <= p1:  # and p1 * p2 > B // 100:  # к условию, что p2>p1
                        p2 += lmd_p

                    while p2 * p1 <= B:  # and p1 * p2 > B // 100:
                        signss = check_signs(a_base, [p1, p2])
                        if signss:
                            item = Signature(Sign(a_base, p1), [p1, p2])
                            s += f"{item.primes}    {signss}    {item.sign}\n"
                            n_list.append(Signature(item.sign, [p1, p2]))
                        p2 += lmd_p
                else:  # между 10**6..10**8
                    if len(a_base) > 6:
                        a_base = a_base[:6]
                    lmd_p = Lambda_p(a_base, p1)
                    leg1 = []
                    for a in a_base:
                        leg1.append(numth.jacobi(a, p1))

                    if p1 % 4 == 1:
                        p2_4k3 = readfile("primes/4k+3.txt")
                        p2_4k1 = readfile("primes/4k+1.txt")

                        for p2 in p2_4k3:
                            if p1 * p2 <= B:  # and p1 * p2 > B // 100:
                                if p2 % lmd_p == 1 and p2 > p1:
                                    leg2 = []
                                    for a in a_base:
                                        leg2.append(numth.jacobi(a, p2))
                                    signss = check_signs(a_base, [p1, p2])
                                    if leg1 == leg2 and signss:
                                        item = Signature(
                                            Sign(a_base, p1), [p1, p2])
                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                        n_list.append(item)
                            # else:
                            # break
                        for p2 in p2_4k1:
                            if p1 * p2 <= B:  # and p1 * p2 > B // 100:
                                if p2 % lmd_p == 1 and p2 > p1:
                                    leg2 = []
                                    for a in a_base:
                                        leg2.append(numth.jacobi(a, p2))
                                    signss = check_signs(a_base, [p1, p2])
                                    if np.prod(
                                            leg2
                                    ) == 1 and signss:  # если все 1, то произведение 1
                                        item = Signature(
                                            Sign(a_base, p1), [p1, p2])
                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                        n_list.append(item)
                            # else:
                            # break
                    elif p1 % 8 == 5:
                        p2_8k5 = readfile("primes/8k+5.txt")
                        p2_8k1 = readfile("primes/8k+1.txt")

                        for p2 in p2_8k5:
                            if p1 * p2 <= B:  # and p1 * p2 > B // 100:
                                if p2 % lmd_p == 5 and p2 > p1:
                                    leg2 = []
                                    for a in a_base:
                                        leg2.append(numth.jacobi(a, p2))
                                    signss = check_signs(a_base, [p1, p2])
                                    if leg1 == leg2 and signss:
                                        item = Signature(
                                            Sign(a_base, p1), [p1, p2])
                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                        n_list.append(item)
                            # else:
                            # break
                        for p2 in p2_8k1:
                            if p1 * p2 <= B:  # and p1 * p2 > B // 100:
                                if p2 % lmd_p == 1 and p2 > p1:
                                    leg2 = []
                                    for a in a_base:
                                        leg2.append(numth.jacobi(a, p2))
                                    signss = check_signs(a_base, [p1, p2])
                                    if np.prod(leg2) == 1 and signss:
                                        item = Signature(
                                            Sign(a_base, p1), [p1, p2])
                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                        n_list.append(item)
                            # else:
                            # break
                    elif p1 % 8 == 1:
                        sign = Sign([2], p1)[0]
                        e, f = Val(2, p1 - 1), Val(2, sign)

                        for p2 in primes:
                            if p1 * p2 <= B:  # and p1 * p2 > B // 100:
                                if p2 > p1 and e == f:
                                    if p2 % (2**(e - 1)) == 2**e % (2**(
                                            e - 1)) and p2 % lmd_p == 1:
                                        leg2 = []
                                        for a in a_base:
                                            leg2.append(numth.jacobi(a, p2))
                                        signss = check_signs(a_base, [p1, p2])
                                        if leg1 == leg2 and signss:
                                            item = Signature(
                                                Sign(a_base, p1), [p1, p2])
                                            s += f"{item.primes}    {signss}    {item.sign}\n"
                                            n_list.append(item)
                                    elif p2 % 2**(e +
                                                  1) == 1 and p2 % lmd_p == 1:
                                        leg2 = []
                                        for a in a_base:
                                            leg2.append(numth.jacobi(a, p2))
                                        signss = check_signs(a_base, [p1, p2])
                                        if np.prod(leg2) == 1 and signss:
                                            item = Signature(
                                                Sign(a_base, p1), [p1, p2])
                                            s += f"{item.primes}    {signss}    {item.sign}\n"
                                            n_list.append(item)
                                elif p2 > p1 and f < e and p1 * p2 <= B:  # and p1 * p2 > B // 100:
                                    signss = check_signs(a_base, [p1, p2])
                                    if p2 % lmd_p == 1 and signss:
                                        item = Signature(
                                            Sign(a_base, p1), [p1, p2])
                                        s += f"{item.primes}    {signss}    {item.sign}\n"
                                        n_list.append(item)
                            # else:
                            # break
                writefile(f"res/jnd/2/{a_base}/n_list_{B}.txt", s)
        else:
            continue

    i = 1
    spsp = []
    ss = ""
    for item in n_list:
        prod = np.prod(item.primes)
        if psp(a_base, prod):
            ss += f"{i}    {prod}    {item.primes}    {item.sign}\n"
            i += 1
            spsp.append(item)
    ###
    total_time = "--- %s seconds ---\n" % (time.time() - start_time)
    ###

    ss += f"{total_time}\n"
    writefile(f"res/jnd/2/{a_base}/spsp_{B}.txt", ss)
    return np.array(spsp)