結果
| 問題 | 
                            No.1648 Sum of Powers
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2021-07-29 15:34:57 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                RE
                                 
                             
                            
                            (最新)
                                AC
                                 
                             
                            (最初)
                            
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,022 bytes | 
| コンパイル時間 | 312 ms | 
| コンパイル使用メモリ | 82,788 KB | 
| 実行使用メモリ | 100,168 KB | 
| 最終ジャッジ日時 | 2024-10-03 16:07:20 | 
| 合計ジャッジ時間 | 9,967 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 53 RE * 3 | 
ソースコード
mod = 998244353
def mul(l, r):
    la, lb, lc, ld = l
    ra, rb, rc, rd = r
    return (la*ra+lb*rc) % mod, (la*rb+lb*rd) % mod, (lc*ra+ld*rc) % mod, (lc*rb+ld*rd) % mod
def inv(x):
    a, b, c, d = x
    det = (a * d - b * c) % mod
    det_inv = pow(det, mod-2, mod)
    y = d, -b, -c, a
    return tuple(i * det_inv % mod for i in y)
def mat_pow(a, x):
    b = 1, 0, 0, 1
    while x:
        if x % 2 == 1:
            b = mul(b, a)
        a = mul(a, a)
        x //= 2
    return b
def bsgs(mat, a, b):
    k = 10 ** 5 + 100
    mat_k = mat_pow(mat, k)
    giant = {}
    x = a
    for i in range(k):
        giant[x] = i
        x = mul(mat_k, x)
    mat_inv = inv(mat)
    x = b
    for i in range(k):
        if x in giant:
            return giant[x] * k + i
        x = mul(mat_inv, x)
    return None
a, b, p, q = map(int, input().split())
if b != 0:
    mat = a, -b, 1, 0
else:
    mat = a, 0, 0, a
start = a ** 2 - 2 * b, 0, a, 0
finish = p, 0, q, 0
n = bsgs(mat, start, finish) + 2
print(n)