标签:div rac nbsp res 进制 bsp out begin lcm
题意
给定$n$和$m$个不同的质数,$p_{1}, p_{2}, \dots, p_{m}$问$n$能被$p_{1}, p_{2}, \dots, p_{m}$中至少$1$个数整除的个数是多少
$\begin{array}{l}1 \leq m \leq 16 \\ 1 \leq n, p_{i} \leq 10^{9}\end{array}$
题解
二进制枚举所有数是否选取,即枚举交集。
这m个都是质数所以都互质,能被整除两个数就是能整除他们的$lcm$即乘积。
对于任意的质数$p$,$n$中包含能被$p$整除的数的个数为$\left\lfloor\frac{n}{P}\right\rfloor$
复杂度$\\ O\left(2^{m} \times m\right)$
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 int main(){ 5 int n,m; 6 cin>>n>>m; 7 vector<int>prime(m); 8 for(int i=0;i<m;i++) 9 cin>>prime[i]; 10 int res=0; 11 for(int i=1;i<1<<m;i++){ 12 int t=1,cnt=0; 13 for(int j=0;j<m;j++) 14 if(i>>j & 1){ 15 cnt++; 16 if((ll)t*prime[j]>n){ 17 t=-1; 18 break; 19 } 20 t*=prime[j]; 21 } 22 if(t!=-1){ 23 if(cnt&1) res+=n/t; 24 else res-=n/t; 25 } 26 } 27 cout<<res<<endl; 28 }
标签:div rac nbsp res 进制 bsp out begin lcm
原文地址:https://www.cnblogs.com/hhyx/p/12770947.html