vijos 1629 八(容斥原理 dfs)

2022-05-12 01:26:35 字數 1639 閱讀 6219

本來是想出來了的,,,,但是有個地方寫挫了一直沒發現,sad

就是dfs的時候我傳的pos傳錯了qaq

這題用容斥很好想

首先在區間[l, r]能被a整除的數有r/a-(l-1)/a,下取整。

而這題要求的是

upd:很早以前寫的這個公式感覺不怎麼好,還是用《組合數學》上邊的容斥來想吧。。。我就不寫了。

其中b是區間內能被8整除的數,ai分別為能整除所給的數的集合

那麼我們用容斥加加減減即可。

同時要注意,算整除a和b的數並不是算a×b的數,而是lcm(a, b)

#include #include #include #include #include #include #include using namespace std;

#define rep(i, n) for(int i=0; i

#define for1(i,a,n) for(int i=(a);i<=(n);++i)

#define for2(i,a,n) for(int i=(a);i

#define for3(i,a,n) for(int i=(a);i>=(n);--i)

#define for4(i,a,n) for(int i=(a);i>(n);--i)

#define cc(i,a) memset(i,a,sizeof(i))

#define read(a) a=getint()

#define print(a) printf("%d", a)

#define dbg(x) cout << (#x) << " = " << (x) << endl

#define printarr2(a, b, c) for1(_, 1, b)

#define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl

inline const int getint()

inline const int max(const int &a, const int &b)

inline const int min(const int &a, const int &b)

int main()

八是個很有趣的數字啊。八=發,八八=爸爸,88=拜拜。當然最有趣的還是8用二進位制表示是1000。怎麼樣,有趣吧。當然題目和這些都沒有關係。

某個人很無聊,他想找出[a,b]中能被8整除卻不能被其他一些數整除的數。

第一行乙個數n,代表不能被整除的數的個數。

第二行n個數,中間用空格隔開。

第三行兩個數a,b,中間乙個空格。

乙個整數,為[a,b]間能被8整除卻不能被那n個數整除的數的個數。

3

7764 6082 462

2166 53442

6378
各個測試點1s

對於30%的資料, 1≤n≤5,1≤a≤b≤100000。

對於100%的資料,1≤n≤15,1≤a≤b≤10^9,n個數全都小於等於10000大於等於1。

rcx 原創

noip 2009·dream team 模擬賽 第一期 第一題

容斥原理 數論

兩個集合的容斥關係公式 a b a b a b a b 重合的部分 三個集合的容斥關係公式 a b c a b c a b b c c a a b c 最後可以推廣到n個集合,集合裡的元素為奇數則加,偶數減 hdu 4135 很簡單,直接求出所有的質因子,然後容斥解決 author crystal ...

容斥原理,反演

大概知道為什麼自己水平比較渣啦。一開始只會反演,然後被容斥驚豔到。然後寫了一段時間容斥,反演忘光光。所以融會貫通真的很難。多校的三道題,當時是用反演做的。事實上以前就知道容斥跟莫比烏斯函式值的關係,然後熟練掌握 然後一段時間沒用就忘了哈。簡單來說就是,求乙個數和乙個集合中的數互質的個數,把集合中乙個...

關於容斥原理

容斥原理大概是這樣的,以長方體體積並為例,我們需要用容斥原理容斥出若干個長方體體積的並.首先,我們將每個長方體標號為1 n,那麼這些長方體的取捨顯然可以表示為乙個二進位制的數字s.設f s 表示長方體取捨狀態為s時,長方體的體積並,於是我們可以知道f 111111 有n個1 就是我們最終的所求.好,...