問題一覧 > 通常問題

No.2578 Jewelry Store

レベル : / 実行時間制限 : 1ケース 3.500秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 27
作問者 : suisen / テスター : tko919
1 ProblemId : 9039 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-12-01 01:16:58

注意

Writer による想定解の PyPy3 実装の実行時間は約 2,200 ms です。

問題文

nn 個の宝石があり、i (1in)i\ (1\leq i\leq n) 番目の宝石の美しさは AiA _ i で価値は WiW _ i です。AiA _ iWiW _ i はいずれも正の整数です。

suisen 君は nn 個の宝石から 11 個以上 を選んで指輪を作ります。suisen 君には好きな正整数 mm があり、作られた指輪の価値は次のように定まります。

  • i1,i2,,ik (1i1<i2<<ikn)i _ 1, i _ 2, \ldots, i _ k\ (1 \leq i _ 1 \lt i _ 2 \lt \cdots \lt i _ k \leq n) 番目の宝石を選んだとして、
    • lcm(Ai1,Ai2,,Aik)=m\mathrm{lcm}(A _ {i _ 1}, A _ {i _ 2}, \ldots, A _ {i _ k}) = m のとき、指輪の価値は j=1kWij\displaystyle\prod _ {j = 1} ^ k W _ {i _ j} である。
    • lcm(Ai1,Ai2,,Aik)m\mathrm{lcm}(A _ {i _ 1}, A _ {i _ 2}, \ldots, A _ {i _ k}) \neq m のとき、指輪の価値は 00 である。

    ここで、k (1)k\ (\geq 1) 個の正整数 x1,x2,,xkx _ 1, x _ 2, \ldots, x _ k に対して、lcm(x1,x2,,xk)\mathrm{lcm}(x _ 1, x _ 2, \ldots, x _ k) を、全ての x1,x2,,xkx _ 1, x _ 2, \ldots, x _ k で割り切れる最小の正整数と定義します。

suisen 君が作り得る全ての指輪の価値の総和を 998244353998244353 で割った余りを求めてください。より形式的には、次の値を求めてください。

(k=1nlcm(Ai1,Ai2,,Aik)=m1i1<i2<<ikn,j=1kWij)mod998244353. \left(\sum _ {k = 1} ^ n \sum _ {\overset{\scriptstyle 1 \leq i _ 1 \lt i _ 2 \lt \cdots \lt i _ k \leq n,}{\mathrm{lcm}(A _ {i _ 1}, A _ {i _ 2}, \ldots, A _ {i _ k}) = m}} \prod _ {j = 1} ^ k W _ {i _ j}\right) \bmod 998244353.

TT 個のテストケースが与えられるので、その全てについて上記の問題を解いてください。ただし、TT 個のテストケースで mm の値は共通です。

入力

入力は以下の形式で標準入力から与えられます。

まず 11 行目にテストケースの個数 TT および TT 個のテストケースで共通の正整数 mm が与えられます。

T mT\ m

各テストケースは次の形式で 22 行にわたって与えられます。WW は陽には与えられないことに注意してください。

n B C Dn\ B\ C\ D
A1 A2  AnA _ 1\ A _ 2\ \cdots\ A _ n

このテストケースにおける W=(W1,W2,,Wn)W = (W _ 1, W _ 2, \ldots, W _ n) は次のように定義されます。

Wi={Bif i=1,CWi1+Dif i=2,3,,n. W _ i = \begin{cases} B & \text{if }i=1, \newline C \cdot W _ {i - 1} + D & \text{if }i = 2, 3, \ldots, n. \end{cases}

  • 入力は全て整数で与えられる
  • 1T10001\leq T\leq 1000
  • 1n5×1051\leq n\leq 5\times 10 ^ 5
  • 1m10181\leq m\leq 10 ^ {18}
  • 1Ai10181\leq A _ i \leq 10 ^ {18}
  • 0B,C,D<9982443530\leq B,C,D \lt 998244353
  • TT 個のテストケースにわたる nn の総和は 5×1055\times 10 ^ 5 以下

入力量が非常に多い可能性があることに注意してください。

出力

i (1iT)i\ (1\leq i\leq T) 行目には ii 個目のテストケースの答えを出力してください。最後のテストケースに対する答えを出力した後も改行してください。

サンプル

サンプル1
入力
3 20
6 1 1 1
1 5 2 4 7 10
1 1 2 3
1
20 141421356 173205080 22360679
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
出力
640
0
747444483

この入力は 33 つのテストケースからなり、その全てで m=20m=20 です。

  • 11 つめのテストケースについて: n=6n = 6A=(1,5,2,4,7,10), W=(1,2,3,4,5,6)A = (1, 5, 2, 4, 7, 10),\ W = (1, 2, 3, 4, 5, 6) です。指輪の価値は例えば次のように計算されます。

    • 1,2,31,2,3 番目の宝石を選んだ場合: lcm(A1,A2,A3)=10m\mathrm{lcm}(A _ 1, A _ 2, A _ 3)=10\neq m なので、この場合の指輪の価値は 00 です。
    • 1,2,41,2,4 番目の宝石を選んだ場合: lcm(A1,A2,A4)=20=m\mathrm{lcm}(A _ 1, A _ 2, A _ 4)=20=m なので、この場合の指輪の価値は W1W2W4=8W _ 1 \cdot W _ 2 \cdot W _ 4 = 8 です。

    全てのあり得る指輪の価値の総和は 640640 なので、これを出力します。

  • 22 つめのテストケースについて: n=1n = 1A=(1), W=(1)A = (1),\ W = (1) です。lcm\mathrm{lcm} の値がちょうど mm となるような指輪の作り方は存在しないので、00 を出力します。

  • 33 つめのテストケースについて: 指輪の価値の総和を 998244353998244353 で割ったあまりを出力する必要があることに注意してください。

サンプル2
入力
1 1
1 1 1 1
1
出力
1

宝石を 11 つも選ばずに指輪を作ることはできないことに注意してください。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。