容斥原理:能被整除的数

简介: 容斥原理:能被整除的数

给定一个整数 n和 m个不同的质数 p1,p2,…,pm。


请你求出 1∼n中能被 p1,p2,…,pm中的至少一个数整除的整数有多少个。


输入格式

第一行包含整数 n和 m。


第二行包含 m个质数。


输出格式

输出一个整数,表示满足条件的整数的个数。


数据范围

1≤m≤16,

1≤n,pi≤10^9


输入样例:
1. 10 2
2. 2 3
输出样例:
7

容斥原理定义:在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。


思路:用遍历模运算在数据量小的时候是常用的算法,但是本题n为10^9,复杂度过高会TLE。


这里使用容斥原理,不计算出每个符合情况的数有哪些,仅去计算个数有多少,这样就降低了时间复杂度。


p[N]存放质数,假设pi指可以被p[i]整除的个数,那么pi=n/p[i];


类推pi并上pj   pi||pj=n/pi*pj;利用容斥原理就可以计算出p1p2p3....pn的个数,qie时间复杂度为2^m

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=16;
int n,m,p[N];
ll res;
int main(){
    cin>>n>>m;
    for(int  i=0;i<m;i++)cin>>p[i];
    for(int i=1;i<1<<m;i++)
    {
        int t=1,cnt=0;
        for(int  j=0;j<m;j++)
        {
            if(i>>j&1)
            {
                cnt++;
                if((ll)t*p[j]>n)
                {
                    t=-1;
                    break;
                }
                t*=p[j];
            }
        }
        if(t!=-1)
        {
            if(cnt%2)res+=n/t;
            else res-=n/t;
        }    
    }
    cout<<res<<endl;
    return 0;
}
相关文章
overleaf 插入图片,引用图片,图标标题Fig与文章引用Figure不一致解决
overleaf 插入图片,引用图片,图标标题Fig与文章引用Figure不一致解决
9460 0
|
前端开发 小程序
扩展uview复选组件库支持自定义图片+自定义内容
扩展uview复选组件库支持自定义图片+自定义内容
409 6
|
存储 网络协议 安全
C/C++网络编程基础知识超详细讲解第一部分(系统性学习day11)
C/C++网络编程基础知识超详细讲解第一部分(系统性学习day11)
|
存储 数据可视化 JavaScript
基于Echarts构建大数据招聘岗位数据可视化大屏
基于Echarts构建大数据招聘岗位数据可视化大屏
745 0
技术笔记:SVG学习之stroke
技术笔记:SVG学习之stroke
223 0
|
传感器 存储 安全
机器通信 | 《5G移动无线通信技术》之八
本节主要介绍了机器通信的内容以及超可靠机器类通信。
机器通信  | 《5G移动无线通信技术》之八
|
数据采集 数据处理 异构计算
ZYNQ(FPGA)与DSP之间SRIO通信实现
XQ6657Z35-EVM多核开发板通过SPI、EMIF16、uPP、SRIO 通信接口将DSP 与Zynq 结合在一起,组成DSP+Zynq 架构,实现了需求独特、灵活、功能强大的DSP+Zynq 高速数据采集处理系统。
ZYNQ(FPGA)与DSP之间SRIO通信实现
现代控制理论课程实验二:利用状态观测器实现状态反馈的系统设计
现代控制理论课程实验二:利用状态观测器实现状态反馈的系统设计
现代控制理论课程实验二:利用状态观测器实现状态反馈的系统设计
|
Cloud Native 数据管理 关系型数据库
祝贺!我的同事李飞飞当选ACM Fellow、IEEE Fellow
因在数据库查询处理和优化以及云数据库系统方面所做出的卓越贡献而入选
1415 0
祝贺!我的同事李飞飞当选ACM Fellow、IEEE Fellow