題目描述:
給定乙個整數n和m個不同的質數p1,p2,…,pm。
請你求出1~n中能被p1,p2,…,pm中的至少乙個數整除的整數有多少個。
輸入格式
第一行包含整數n和m。第二行包含m個質數。
輸出格式
輸出乙個整數,表示滿足條件的整數的個數。
資料範圍
1≤m≤16,
1≤n,pi≤10^9
輸入樣例:
10 2
2 3
輸出樣例:
7
分析:
本題考察容斥原理。即
從m個質數中選數使用了在狀態壓縮中常用的位運算操作,1到2^m - 1對應了所有數的選擇情況,對應位為1表示選中了,對應位為0表示未選中。比如m = 5,數21 = 10101表示選中了第1,3,5個質數。用此方式確定選中的質數及其乘積,當被選中的質數個數是奇數時,我們就加上1到n中能被這些數乘積整除的數的個數;是偶數時就減去能被這些數整除數的個數。
#include using namespace std;
typedef long long ll;
int p[20];
int main()
t *= p[j];
s++;}}
if(t != -1)
}cout<
return 0;
}
AcWing 890 能被整除的數(容斥原理)
給定乙個整數n和m個不同的質數p1,p2,pm。請你求出1 n中能被p1,p2,pm中的至少乙個數整除的整數有多少個。輸入格式 第一行包含整數n和m。第二行包含m個質數。輸出格式 輸出乙個整數,表示滿足條件的整數的個數。資料範圍 1 m 16 1 n,pi 1e9 輸入樣例 10 2 2 3輸出樣例...
能被某些數整除的數的特徵
性質1 如果數a b都能被c整除,那麼它們的和 a b 或差 a b 也能被c整除。性質2 幾個數相乘,如果其中有乙個因數能被某乙個數整除,那麼它們的積也能被這個數整除。能被2整除的數,個位上的數能被2整除 偶數都能被2整除 那麼這個數能被2整除 能被3整除的數,各個數字上的數字和能被3整除,那麼這...
能被某些數整除的數的特徵
性質1 如果數a b都能被c整除,那麼它們的和 a b 或差 a b 也能被c整除。性質2 幾個數相乘,如果其中有乙個因數能被某乙個數整除,那麼它們的積也能被這個數整除。能被2整除的數,個位上的數能被2整除 偶數都能被2整除 那麼這個數能被2整除 能被3整除的數,各個數字上的數字和能被3整除,那麼這...