1. 程式人生 > >51nod 1769 Clarke and math2(線性篩+dp)

51nod 1769 Clarke and math2(線性篩+dp)

克拉克是一名人格分裂患者。某一天他變成一名數學家,在研究奇怪的東西。
他突然想算這麼一個式子,給出 f(i),1≤i≤n ,要求算
g(i)=∑i1∣i∑i2∣i1∑i3∣i2⋯∑ik∣ik−1f(ik) mod 1000000007 (1≤i≤n,ij∈N+)
∣ 是整除的意思,比如 i1=5,i2=10則i1∣i2

樣例解釋:

g(i) = sum(i1 | i) sum(i2 | i1) sum(i3 | i2) f(i3)

我們來看g(2)

當i1=1, i2=1, i3=1時累加一個f(1)
當i1=2, i2=1, i3=1時累加一個f(1)
當i1=2, i2=2, i3=1時累加一個f(1)
當i1=2, i2=2, i3=2時累加一個f(2)

所以g(2)=f(1)+f(1)+f(1)+f(2)=9
Input
第一行為兩個整數n, k(1 ≤ n ≤ 500000, 1 ≤ k ≤ 10^1000000)。
接下來一行n個整數,第i個整數代表f(i), 0 ≤ f(i) < 10^9+7。
Output
輸出一行n個數,第i個表示g(i)。
Input示例
23 3
2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
Output示例
2 9 9 24 9 39 9 50 24 39 9 102 9 39 39 90 9 102 9 102 39 39 9


GG
nO(logn)
klogn
dp[i][j]=k|idp[k][j1]dp[i][1]=f[i]
ijj1
ji
ilogn