能被整除的数

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 }

 

以上是关于能被整除的数的主要内容,如果未能解决你的问题,请参考以下文章

能被整除的数

180113 打印1-100既能被3整除又能被5整除的数

期末考试——编程题#2:能被3,5,7整除的数

一些数的整除问题

3-素数对中间的数能被6整除

day02_01.能被3整除的数