能被整除的数
Posted hhyx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了能被整除的数相关的知识,希望对你有一定的参考价值。
题意
给定$n$和$m$个不同的质数,$p_{1}, p_{2}, dots, p_{m}$问$n$能被$p_{1}, p_{2}, dots, p_{m}$中至少$1$个数整除的个数是多少
$egin{array}{l}1 leq m leq 16 \ 1 leq n, p_{i} leq 10^{9}end{array}$
题解
二进制枚举所有数是否选取,即枚举交集。
这m个都是质数所以都互质,能被整除两个数就是能整除他们的$lcm$即乘积。
对于任意的质数$p$,$n$中包含能被$p$整除的数的个数为$leftlfloorfrac{n}{P} ight floor$
复杂度$\ Oleft(2^{m} imes m ight)$
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 }
以上是关于能被整除的数的主要内容,如果未能解决你的问题,请参考以下文章