提出 #62117259


ソースコード 拡げる

# https://judge.yosupo.jp/submission/159590
from random import randint
from math import gcd


def is_prime(n):
    if n % 2 == 0:
        return n == 2
    if n == 1:
        return False
    d = n - 1
    s = 0
    while d % 2 == 0:
        d = d // 2
        s += 1
    a = [2, 7, 61]
    for i in a:
        if i >= n:
            break
        now = pow(i, d, n)
        if now != 1:
            comp = True
            for j in range(s):
                if now == n - 1:
                    comp = False
                    break
                now = (now * now) % n
            if comp:
                return False
    return True


def prime_fact(n):
    ret = []
    for i in range(2, 100):
        while n % i == 0:
            ret.append(i)
            n //= i
    if n == 1:
        return ret
    calc = [n]
    while len(calc) > 0:
        n = calc.pop()
        while not (is_prime(n)):
            x = randint(0, n - 1)
            plus = randint(1, n - 1)
            y = x
            i = 1
            while True:
                x = (x * x + plus) % n
                y = (y * y + plus) % n
                y = (y * y + plus) % n
                d = gcd(abs(x - y), n)
                if d == 1:
                    i += 1
                elif d == n or d == 0:
                    break
                else:
                    if is_prime(d):
                        ret.append(d)
                    else:
                        calc.append(d)
                    n = n // d
                    break
        ret.append(n)
    return ret


from sys import stdin
input = stdin.readline

for _ in range(int(input())):
    n = int(input())
    while True:
        k = randint(1, 1000)
        p = n * k + 1
        if is_prime(p):
            break
    fa = list(set(prime_fact(n)))
    while True:
        a = pow(randint(1, p - 1), k, p)
        for f in fa:
            if pow(a, n // f, p) == 1:
                break
        else:
            print(a, p)
            break

提出情報

提出日時
問題 C - A^n - 1
ユーザ sounansya
言語 Python (PyPy 3.10-v7.3.12)
得点 600
コード長 2086 Byte
結果 AC
実行時間 331 ms
メモリ 86296 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 1
AC × 22
セット名 テストケース
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 02_large_00.txt, 02_large_01.txt, 02_large_02.txt, 02_large_03.txt, 02_large_04.txt, 03_divisior_00.txt, 03_divisior_01.txt, 04_kN_1_00.txt, 04_kN_1_01.txt, 04_kN_1_02.txt, 05_prime_00.txt, 05_prime_01.txt, 05_prime_02.txt, 05_prime_03.txt, 05_prime_04.txt, 05_prime_05.txt, 06_random_00.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 72 ms 77360 KiB
01_small_00.txt AC 202 ms 86072 KiB
01_small_01.txt AC 209 ms 85576 KiB
01_small_02.txt AC 217 ms 85504 KiB
01_small_03.txt AC 156 ms 85836 KiB
02_large_00.txt AC 307 ms 86284 KiB
02_large_01.txt AC 305 ms 86024 KiB
02_large_02.txt AC 314 ms 86296 KiB
02_large_03.txt AC 245 ms 85528 KiB
02_large_04.txt AC 237 ms 86048 KiB
03_divisior_00.txt AC 249 ms 85512 KiB
03_divisior_01.txt AC 207 ms 85548 KiB
04_kN_1_00.txt AC 319 ms 85892 KiB
04_kN_1_01.txt AC 331 ms 85332 KiB
04_kN_1_02.txt AC 312 ms 85496 KiB
05_prime_00.txt AC 192 ms 85368 KiB
05_prime_01.txt AC 211 ms 85376 KiB
05_prime_02.txt AC 201 ms 85172 KiB
05_prime_03.txt AC 251 ms 85876 KiB
05_prime_04.txt AC 287 ms 86264 KiB
05_prime_05.txt AC 298 ms 85572 KiB
06_random_00.txt AC 298 ms 85888 KiB