本來是想出來了的,,,,但是有個地方寫挫了一直沒發現,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;八是個很有趣的數字啊。八=發,八八=爸爸,88=拜拜。當然最有趣的還是8用二進位制表示是1000。怎麼樣,有趣吧。當然題目和這些都沒有關係。#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()
某個人很無聊,他想找出[a,b]中能被8整除卻不能被其他一些數整除的數。
第一行乙個數n,代表不能被整除的數的個數。
第二行n個數,中間用空格隔開。
第三行兩個數a,b,中間乙個空格。
乙個整數,為[a,b]間能被8整除卻不能被那n個數整除的數的個數。
37764 6082 462
2166 53442
各個測試點1s6378
對於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 就是我們最終的所求.好,...