daniel13265 從不知**找來了 nn 個齒輪,第 ii 個齒輪的齒數為不超過 mm 的正整數 a_iai
。他現在想把其中 kk 個齒輪按照一定的方式拼接在一起。
當齒輪使用一段時間後,就會產生損耗。乙個齒輪組的損耗速率是由這個齒輪組的所有齒輪齒數的最大公約數決定的:最大公約數越大,相同的齒之間嚙合的頻率就會增高,從而損耗的速率就會變快。這個最大公約數又被稱為損耗因子。
算出乙個齒輪組的損耗因子是很容易的。可是現在 daniel13265 想要知道,對於可能拼接出的所有齒輪組的損耗因子。
daniel13265 知道拼接出損耗因子大於 mm 的齒輪組是不可能的,而且由於可能拼出的齒輪組的個數很多,你只需要反過來告訴他對於所有的 t\in[1, m]t∈[1,m],能夠拼接出的損耗因子為 tt 的齒輪組的個數對 10^9+710
9+7 取模後的結果即可。
輸入共 2 行。
第一行包含三個正整數 n,m,分別表示 daniel13265 擁有的齒輪個數,齒輪齒數的最大可能值與 daniel13265 期望的齒輪組的齒輪個數。
第二行共 nn 個用單個空格隔開的正整數,第 i 個數 ai 表示第 i 個齒輪的齒數。
輸出一行 m 個整數,第 t 個數表示能夠拼接出的損耗因子為 t 的齒輪組的個數對 10^9+7 取模後的結果。
輸入 #1
5 6 2
1 2 3 4 6
輸出 #1
6 3 1 0 0 0
損耗因子為 11 的齒輪組有 (1,2),(1,3),(1,4),(1,6),(2,3),(3,4) 共 6 個;
損耗因子為 22 的齒輪組有 (2,4),(2,6),(4,6) 共 3 個;
損耗因子為 33 的齒輪組有 (3,6) 共 1 個。
容斥
#include
using
namespace std;
typedef
long
long ll;
typedef
double db;
const ll mod=
1e9+7;
const
int n=
1e6+
500;
ll f[n]
,inv[n]
,vis[n]
,ans[n]
;ll qpow
(ll a,ll b)
return ans;
}void
init()
inv[n-1]
=qpow
(f[n-1]
,mod-2)
;for
(int i=n-
2;i>=0;
--i)
}ll c
(ll n,ll m)
intmain()
for(
int i=m;i;
--i)
ans[i]
=(ans[i]+c
(cut,k)
+mod)
%mod;
}for
(int i=
1;i<=m;
++i)
return0;
}
洛谷P5049 洛谷P5022 題解 旅行
原題 資料加強版 加強版 參考你谷題解 終於調過了 又是一如既往的申必錯誤 noi plus石錘了 原題的資料允許我們 o n 2 暴力斷邊,但是加強版的資料達到了 n log n 級別,我們必須在斷邊這一環節尋求更好的解法。考慮我們進入環後在何處回溯 根據繼續走環走到的點分類 設當前已經從 b 走...
洛谷練習P2279 P1346
2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,經常引發火...
洛谷 P1396 營救
題目描述 咚咚咚 查水表!原來是查水表來了,現在 找這麼熱心上門的查表員啊!小明感動的熱淚盈眶,開起了門 媽媽下班回家,街坊鄰居說小明被一群陌生人強行押上了警車!媽媽豐富的經驗告訴她小明被帶到了t區,而自己在s區。該市有m條大道連線n個區,一條大道將兩個區相連線,每個大道有乙個擁擠度。小明的媽媽雖然...