問題一覧 >
通常問題
No.2578 Jewelry Store
レベル :
/ 実行時間制限 : 1ケース 3.500秒 / メモリ制限
: 512 MB / 標準ジャッジ問題
タグ :
/
解いたユーザー数 27
作問者 :
suisen
/ テスター :
tko919
問題文最終更新日: 2023-12-01 01:16:58
注意
Writer による想定解の PyPy3 実装の実行時間は約 2,200 ms です。
問題文
n 個の宝石があり、i (1≤i≤n) 番目の宝石の美しさは Ai で価値は Wi です。Ai と Wi はいずれも正の整数です。
suisen 君は n 個の宝石から 1 個以上 を選んで指輪を作ります。suisen 君には好きな正整数 m があり、作られた指輪の価値は次のように定まります。
- i1,i2,…,ik (1≤i1<i2<⋯<ik≤n) 番目の宝石を選んだとして、
- lcm(Ai1,Ai2,…,Aik)=m のとき、指輪の価値は j=1∏kWij である。
- lcm(Ai1,Ai2,…,Aik)=m のとき、指輪の価値は 0 である。
ここで、k (≥1) 個の正整数 x1,x2,…,xk に対して、lcm(x1,x2,…,xk) を、全ての x1,x2,…,xk で割り切れる最小の正整数と定義します。
suisen 君が作り得る全ての指輪の価値の総和を 998244353 で割った余りを求めてください。より形式的には、次の値を求めてください。
k=1∑nlcm(Ai1,Ai2,…,Aik)=m1≤i1<i2<⋯<ik≤n,∑j=1∏kWijmod998244353.
T 個のテストケースが与えられるので、その全てについて上記の問題を解いてください。ただし、T 個のテストケースで m の値は共通です。
入力
入力は以下の形式で標準入力から与えられます。
まず 1 行目にテストケースの個数 T および T 個のテストケースで共通の正整数 m が与えられます。
T m
各テストケースは次の形式で 2 行にわたって与えられます。W は陽には与えられないことに注意してください。
n B C D
A1 A2 ⋯ An
このテストケースにおける W=(W1,W2,…,Wn) は次のように定義されます。
Wi={BC⋅Wi−1+Dif i=1,if i=2,3,…,n.
- 入力は全て整数で与えられる
- 1≤T≤1000
- 1≤n≤5×105
- 1≤m≤1018
- 1≤Ai≤1018
- 0≤B,C,D<998244353
- T 個のテストケースにわたる n の総和は 5×105 以下
入力量が非常に多い可能性があることに注意してください。
出力
i (1≤i≤T) 行目には i 個目のテストケースの答えを出力してください。最後のテストケースに対する答えを出力した後も改行してください。
サンプル
サンプル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
この入力は 3 つのテストケースからなり、その全てで m=20 です。
-
1 つめのテストケースについて: n=6 で A=(1,5,2,4,7,10), W=(1,2,3,4,5,6) です。指輪の価値は例えば次のように計算されます。
- 1,2,3 番目の宝石を選んだ場合: lcm(A1,A2,A3)=10=m なので、この場合の指輪の価値は 0 です。
- 1,2,4 番目の宝石を選んだ場合: lcm(A1,A2,A4)=20=m なので、この場合の指輪の価値は W1⋅W2⋅W4=8 です。
全てのあり得る指輪の価値の総和は 640 なので、これを出力します。
-
2 つめのテストケースについて: n=1 で A=(1), W=(1) です。lcm の値がちょうど m となるような指輪の作り方は存在しないので、0 を出力します。
-
3 つめのテストケースについて: 指輪の価値の総和を 998244353 で割ったあまりを出力する必要があることに注意してください。
サンプル2
入力
1 1
1 1 1 1
1
出力
1
宝石を 1 つも選ばずに指輪を作ることはできないことに注意してください。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。