結果
問題 |
No.3182 recurrence relation’s intersection sum
|
ユーザー |
![]() |
提出日時 | 2025-06-17 16:28:28 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 208 ms / 2,000 ms |
コード長 | 2,388 bytes |
コンパイル時間 | 425 ms |
コンパイル使用メモリ | 82,360 KB |
実行使用メモリ | 77,316 KB |
最終ジャッジ日時 | 2025-06-17 16:28:36 |
合計ジャッジ時間 | 7,616 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 40 |
ソースコード
mod = 998244353 # a Random BIG Prime number def ipow(base:int, power:int): ret, piv = 1, base while power: if (power & 1): ret = ret * piv % mod piv = piv * piv % mod power >>= 1 return ret def berlekamp_massey(x:list): ls, cur = [], [] lf, ld = 0, 0 for i in range(len(x)): t = 0 for j in range(len(cur)): t = (t + x[i-j-1] * cur[j]) % mod if (t-x[i]) % mod == 0: continue if not cur: cur = [0] * (i+1) lf = i ld = (t-x[i]) % mod continue k = -(x[i]-t) * ipow(ld, mod-2) % mod c = [0] * (i-lf-1) c.append(k) for j in ls: c.append(-j * k % mod) if len(c) < len(cur): c += [0] * (len(cur)-len(c)) for j in range(len(cur)): c[j] = (c[j]+cur[j]) % mod if (i-lf+len(ls)) >= len(cur): ls, lf, ld = cur, i, (t-x[i])%mod cur = c for i in cur: i = (i % mod + mod) % mod return cur def get_nth(rec:list, dp:list, n:int): m = len(rec) s, t = [0]*m, [0]*m s[0] = 1 if m != 1: t[1] = 1 else: t[0] = rec[0] def mul(v:list, w:list): m = len(v) t = [0]*(2*m) for j in range(m): for k in range(m): t[j+k] += v[j] * w[k] % mod if t[j+k] >= mod: t[j+k] -= mod for j in range(2*m-1, m-1, -1): for k in range(1, m+1): t[j-k] += t[j] * rec[k-1] % mod if t[j-k] >= mod: t[j-k] -= mod # Resize idk if this is required if len(t) < m: t += [0]*(m-len(t)) else: t = t[:m] return t while n: if n & 1: s = mul(s, t) t = mul(t, t) n >>= 1 ret = 0 for i in range(m): ret += s[i] * dp[i] % mod return ret % mod def guess_nth_term(x:list, n:int): if n < len(x): return x[n] v = berlekamp_massey(x) if not v: return 0 return get_nth(v, x, n) K,L,R=map(int, input().split()) S=[1] A=[1] for i in range(0,10000): s=A[-1]*K+pow(i,K,mod)+pow(K,i,mod) s%=mod A.append(s) S.append((S[-1]+s)%mod) l=0 if L!=0: l=guess_nth_term(S,L-1) r=guess_nth_term(S,R) print((r-l)%mod)