首页 > 其他分享 >容斥原理:能被整除的数

容斥原理:能被整除的数

时间:2023-08-08 17:46:05浏览次数:39  
标签:int res 质数 容斥 整数 选中 集合 原理 整除

给定一个整数 <span id="MathJax-Span-2" class="mrow"><span id="MathJax-Span-3" class="mi">n 和 <span id="MathJax-Span-5" class="mrow"><span id="MathJax-Span-6" class="mi">m 个不同的质数p1,p2,…,pm。

请你求出1∼n 中能被 <span id="MathJax-Span-28" class="mrow"><span id="MathJax-Span-29" class="msubsup"><span id="MathJax-Span-30" class="mi">p1,p2,…,pm 中的至少一个数整除的整数有多少个。

输入格式

第一行包含整数 n 和 m。

第二行包含 m 个质数。

输出格式

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

数据范围

<span id="MathJax-Span-52" class="mrow"><span id="MathJax-Span-53" class="mn">1≤m≤16,
<span id="MathJax-Span-59" class="mrow"><span id="MathJax-Span-60" class="mn">1≤n,pi≤109

输入样例:

10 2
2 3

输出样例:

7

 

 

 

 

#include<iostream>
using namespace std;
typedef long long LL;
const int N = 20;
int p[N], n, m;
int main() { cin >> n >> m;
for(int i = 0; i < m; i++) cin >> p[i];

int res = 0;
//枚举从1 到 1111...(m个1)的每一个集合状态, (至少选中一个集合)
for(int i = 1; i < 1 << m; i++) {
int t = 1; //选中集合对应质数的乘积
int s = 0; //选中的集合数量

//枚举当前状态的每一位
for(int j = 0; j < m; j++){
//选中一个集合
if(i >> j & 1){
//乘积大于n, 则n/t = 0, 跳出这轮循环
if((LL)t * p[j] > n){ t = -1; break; }
s++; //有一个1,集合数量+1
t *= p[j];
}
}
if(t == -1) continue;
if(s & 1) res+= n/t; //选中奇数个集合,则系数应该是1, n/t为当前这种状态的集合数量
else res -= n / t; //反之则为 -1
}
cout << res << endl;
return 0;
}

 

标签:int,res,质数,容斥,整数,选中,集合,原理,整除
From: https://www.cnblogs.com/liyuzhong/p/17615002.html

相关文章

  • 【计算机网络】WebSocket 是什么原理?为什么可以实现持久连接?
    一、WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接),循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的......
  • 复习笔记|《计算机组成原理》
    参考教材:《计算机组成原理》蒋本珊➢前2类题看书中和课件中的有关概念。➢第3、4、5类题请注意平时的作业。如:❑扩展操作码设计❑有效地址的计算❑定点数乘、除运算❑存储器设计❑Cache计算❑微指令操作控制字段的设计第一章➢存储程序概念计算机硬件的组成,存储器控......
  • 【CV算法原理理解】人脸对齐之GBDT(ERT)算法原理
    前言 概念树、决策树、二叉树、随机森林、随机蕨、CART分类回归树;GBDT的全称是GradientBoostingDecisionTree,梯度提升决策树。Xgboost;简介OneMillisecondFaceAlignmentwithanEnsembleofRegressionTrees算法(以下简称GBDT)是一种基于回归树的人脸对齐算法,这种......
  • 【Hystrix技术指南】(3)超时机制的原理和实现
    推荐超值课程:点击获取[每日一句]也许你度过了很糟糕的一天,但这并不代表你会因此度过糟糕的一生。[背景介绍]分布式系统的规模和复杂度不断增加,随着而来的是对分布式系统可用性的要求越来越高。在各种高可用设计模式中,【熔断、隔离、降级、限流】是经常被使用的。而相关的技......
  • 单片机 | 51单片机原理
    文章目录一、引脚分布介绍1.分类2.电源引脚3.时钟引脚(2根)4.控制引脚(4根)5.端口引脚(32根)二、存储器结构及空间分布介绍1.存储器的划分方法2.程序存储器(ROM)3.数据存储器(RAM)三、复位、时钟与时序1.复位与复位电路2.时钟电路3.单片机时序四、并行I/......
  • PostgreSQL-PITR 原理
    在 PostgreSQL的数据目录的pg_wal(10版本之前是pg_xlog子目录)子目录中始终维护一个WAL日志文件。该日志文件记录了数据库数据文件的每次改变。最初设计该日志文件的主要目的是为了数据库异常崩溃后,能够重放最后一次checkpoint点之后的日志文件,把数据库推到最终的一致状态,......
  • Nginx 体系化之配置文件重载(平滑升级)原理
    Nginx作为一款高性能的开源Web服务器,以其出色的性能和灵活的配置而备受青眯,在Nginx中,配置文件有着决定性的作用,而配置文件的重载机制更是保障系统稳定运行的关键。本文将讲解一下Nginx配置文件重载的核心原理,以及讲述实际场景的应用Nginx配置文件重载原理1.Nginx配置文件......
  • ArrayList底层原理、线程安全及其相关集合(面试常问)
    一、ArrayList底层原理1.特点及其原理:ArrayList底层基于数组实现,查找快,增删慢2.ArrayList底层原理,初始化及调用add()方法添加元素:默认初始化容量为10第一次创建集合并在添加第一个元素时在底层创建一个默认长度为10的数组:​调用构造函数初始化时默认创建的是空数组只......
  • [系统设计] 计算机系统设计思想:缓存/局部性原理(转载)【待完善】
    1缓存概述缓存思想是计算机系统设计中极为重要的解决手段,其本质原则是————局部性原理在资源有限的情况下,将热点资源、最重要的资源部署到离请求方最近的地方去,以达到性能预期。1.1什么是缓存,为什么要用缓存?缓存就是数据交换的缓冲区(称作Cache),是存贮数据(使用频繁的数据......
  • springboot智能3D导诊系统源码,基于规则模板的开发原理
    互联网智慧3D导诊系统源码通过智能导诊,进行自助问询及挂号服务,减轻导诊台护士压力,挂号更加方便快捷。技术架构:springboot+redis+mybatisplus+mysql+RocketMQ  智慧导诊系统开发原理导诊系统从原理上大致可分为基于规则模板和基于数据模型两类。1、基于规则推理的方法通过人工建......