容斥原理的二进制实现模版

最近学习容斥原理,实现容斥原理大致有三种方法:dfs,队列数组,二进制。

今天主要讲下二进制实现容斥原理:

   有一个集合{A1……An},求集合的子集?很显然答案为

也就是2^n个,也就是每一个子集有唯一标志符 i (0<i<2^n,空集除外),也就是说有唯一的二进制表示!

代码看下面的:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 #include<iomanip>
 5 #include<cmath>
 6 #include<cstring>
 7 #include<vector>
 8 #include<stdlib.h>
 9 using namespace std;
10 int prime[40000],m;
11 bool f[40000];
12 vector<int>p;//存放质因数
13 //用筛法初始化40000以内的质数,将质数存放在prime数组中,m记录大小
14 int init(){
15     m=0;
16     for(int i=2; i<40000; i++){
17         if (f[i]==0) prime[m++]=i;//质数
18         //筛去合数
19         for (int j=0; j<m&&i*prime[j]<40000; j++){
20             f[i*prime[j]]=1;
21             if (i%prime[j]==0) break;//保证每个数只筛去一次
22         }
23     }
24 }
25 //对n分解质因数
26 void factor(int n){
27     p.clear();
28     for (int i=0; i<m&&prime[i]*prime[i]<=n; i++){
29         if (n%prime[i]==0){
30             p.push_back(prime[i]);
31             n/=prime[i];
32             while (n%prime[i]==0)
33                 n/=prime[i];
34         }
35     }
36     if(n>1) p.push_back(n);
37 }
38 //用二进制实现容斥原理,求区间[1,r]内与n互素的数的个数
39 int solve(int r){
40     int sum = 0;
41     //i的范围是1-2^p.size(),空集除外,每一个子集所对应的
42     //二进制都不一样,也就是i
43     for (int i=1; i<(1<<p.size()); ++i){
44         int mult = 1,bits = 0;
45         for (int j=0; j<p.size(); ++j)
46             if (i&(1<<j)){//与i的二进制的第j位比较,看是否为1,是则选中
47                 bits++;//计算i中1的个数,也就是质因数的个数
48                 mult *= p[j];
49             }
50         int cur = r / mult;
51         if (bits & 1)//若1的个数是奇数则进行加法,否则进行减法
52             sum += cur;
53         else sum -= cur;
54     }
55     return r - sum;//用总的数目-与n不互素的个数
56 }
57 int main(){
58     init();
59     int n,r;
60     while(cin>>n>>r){
61         factor(n);
62         cout<<solve(r)<<endl;
63     }
64     return 0;
65 }

 

转载于:https://www.cnblogs.com/xin-hua/p/3213050.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试鼠标双击_鼠标环境可靠性测试是什么

鼠标和电脑是的组合&#xff0c;购买电脑时一般商家会送给用户一个配套的鼠标&#xff0c;鼠标和电脑一样&#xff0c;对环境的要求较高&#xff0c;极少部分的鼠标由于短路或者是环境温度过高的问题会导致鼠标出现自燃的现象&#xff0c;如果用户此时正在使用电脑编辑文件&…

virtualbox主机网络管理 未能创建_如何在 VirtualBox 中增加现有虚拟机的磁盘大小 | Linux 中国...

导读&#xff1a;你可以在 VirtualBox 中扩大虚拟硬盘&#xff0c;即使在创建之后也可以。                   本文字数&#xff1a;1434&#xff0c;阅读时长大约&#xff1a;2分钟https://linux.cn/article-12869-1.html作者&#xff1a;Dimitrios Savvopoulos译者…

usb长包数据结束判断_如何判断南桥好坏 判断南桥好坏方法介绍【详解】

南桥是电脑里重要的零部件&#xff0c;南桥芯片主要是负责I/O接口等一些外设接口的控制、IDE设备的控制及附加功能等等。那么南桥发生故障&#xff0c; 怎么判断南桥好坏 呢?一、通过测PCI槽、AGP槽对地打阻值可判定南北桥有无损坏1、PCI槽中所有的AD复合线对地打阻值都为300&…

taskkill无法终止进程 拒绝访问_解决删除文件时,提示无法删除的问题

有时我们想删除某个程序文件夹&#xff0c;或是卸载后残留的一些 .dll 等后缀的文件&#xff0c;却一直提示 “运行中” 、 “权限不足” &#xff0c;甚至用第三方的强力删除功能都无法删除。这时我们可以用系统自带的命令行功能&#xff0c;使用几个简单的小命令就可以彻底删…

擦窗机器人测试标准_擦窗机器人,我选择玻妞的三个理由!

很多人都喜欢高层&#xff0c;一览无遗&#xff0c;广阔风景&#xff01;可现实是无论什么高层湖景都会被窗户上日积月累的灰尘遮挡的严严实实&#xff0c;每次擦窗都累到怀&#xff01;疑&#xff01;人&#xff01;生&#xff01;于是一年又一年&#xff0c;你想要的风景始终…

Oracle客户端与java_Oracle 谈 JavaFX 及 Java 客户端技术的未来

原标题&#xff1a;Oracle 谈 JavaFX 及 Java 客户端技术的未来据 Oracle 博客称&#xff0c;从 JDK 11 开始&#xff0c;Oracle 将从 JDK 中删除 JavaFX&#xff0c;但在 2022 年之前&#xff0c;Oracle 还会继续为 JDK 8 中的 JavaFX 提供商业支持。2011 年&#xff0c;JavaF…

低代码开发平台_低代码开发平台测评——伙伴云

​本次测评的产品严格来说不算低代码开发平台&#xff0c;它自己给自己的定位更多是全流程数据生产力平台。不过它依然具备应用搭建的关键要素&#xff0c;而且在数据管理方面还比较出彩&#xff0c;所以不能放过它——伙伴云&#xff0c;这款由Discuz&#xff01;主创团队操刀…

oracle对某两列求和再求和_函数实战:多列条件求和

今天和新手小伙伴们分享有关条件求和的内容&#xff0c;高手请忽略哈。先来看一组销售数据&#xff0c;是某商场不同品牌电视机的三天销售记录&#xff1a;现在需要根据G列的品牌&#xff0c;计算其三天的销售总和。想必有表亲已经想到办法了&#xff0c;既然是按条件求和&…

php 访问第三方接口吗,PHP-----------HTTP请求的第三方接口

2019独角兽企业重金招聘Python工程师标准>>>开发中常常遇到接口请求这个功能&#xff0c;后台也不例外&#xff0c;因为遇到了&#xff0c;所以写一篇。前段时间做商城后台时&#xff0c;需要用到第三方物流接口查询物流信息。post&#xff1a;/***** param $url* par…

(IOS)截图Demo

思路是建一个UIView的子类&#xff0c;获取划动出的矩形&#xff0c;用协议将矩形传递给代理对象&#xff0c;依据该矩形完成图像数据的截取&#xff0c;并显示出来。 截图视图类&#xff1a; #import <UIKit/UIKit.h>protocol UICutImgDelegate;interface BIDCutView : …

POJ1033 Defragment

题目来源&#xff1a;http://poj.org/problem?id1033 题目大意&#xff1a; 某操作系统的文件系统中&#xff0c;所有的磁盘空间被分为N个大小相等的cluster&#xff0c;编号1至N。每个文件占用一个或多个cluster。所有没有被文件占用的cluster称为是空闲的。磁盘上的一个文件…

pcb过孔漏铜_【企业资讯】大正瑞地:专注PCB药水二十年,品质、性能可靠

企业简介公司拥有领先的技术及产品、顾问型服务、PCB药水全系列体系化运行。沉铜、电镀、中/超粗化、减铜药水、化镍金、OSP、显影、退膜及辅助物料等全系列PCB药水&#xff0c;自主研发&#xff0c;拥有核心技术&#xff0c;自成体系&#xff0c;可以全面、系统的供应产品及全…

前端切换视图_前端架构 101(五):从 Flux 进化到 Model-View-Presenter

李熠&#xff1a;前端架构 101&#xff08;一&#xff09;&#xff1a;在谈论它们之前我们需要达成的共识​zhuanlan.zhihu.com李熠&#xff1a;前端架构 101&#xff08;二&#xff09;&#xff1a; MVC 初探​zhuanlan.zhihu.com李熠&#xff1a;前端架构 101&#xff08;三&…

如何连接安卓手机_安卓手机如何使用AirPods

苹果公司推出的无线蓝牙耳机AirPods可以说是市面上最好的无线耳机&#xff0c;配合iPhone使用能够给你带来畅快舒适的体验。有很多小米华为oppo&#xff0c;vivo等安卓手机用户也在问了&#xff0c;安卓手机能够支持AirPods呢&#xff0c;答案是肯定的。图片来源&#xff1a;网…

晒一下我的代码生成器

经过最近一段新的尝试【BS架构】,之前的编程一直是CS架构&#xff0c;但也总是在忙那些项目&#xff0c;没法整理出一套符合自己团队的一套编程体系和架构&#xff1b; 新的起点&#xff0c;又是一个新的挑战&#xff0c;现在已经是03年&#xff0c;最早做的时候是07年&a…

matlab自动排版,工具方法| Matlab 简单绘图与排版

matlab启动界面 来自百度百科对于很多教师与学生&#xff0c;Matlab是做数值计算很好的一款软件。收集、整理、分析数据十分的方便&#xff0c;我们也可以通过Matlab画出相对比较好看的图。这里简单总结下Matlab的画图方式与排版&#xff0c;供初学者参考、交流。Matlab基本都是…

坦克大战代码_坦克大战系列文章-坦克大战简介

前言本篇主要对坦克大战Robocode做一个简单的介绍&#xff0c;对java最初的人工智能算法演练工具做一个了解坦克大战简介今天我们要谈的是java 最初的基于人工智能算法的仿真模拟坦克大战&#xff0c;全称Robocode。Robocode 是一位IBM的工程师 Mat Nelson 用Java 语言所创造的…

php查询文件名,php怎么查询文件名

php查询文件名的方法&#xff1a;可以利用pathinfo()函数来查询。pathinfo()函数以数组的形式返回关于文件路径的信息&#xff0c;包括目录路径、文件名等&#xff0c;如&#xff1a;【print_r(pathinfo("/testweb/test.txt"))】。pathinfo() 函数以数组的形式返回关…

基于live555的视频直播 DM368IPNC RTSP分析

因需要&#xff0c;从个人的理解顺序和需求角度对live555的分析与开发整理&#xff0c;包含RTSP Server与RTSP Client、如何直播H.264流与JPEG流等&#xff0c;均进行了探讨&#xff0c;对live555的初学者有一定的指导意义。 本人习惯使用excel归档&#xff0c;所以本文均为exc…

图像风格迁移_图像风格迁移—谷歌大脑团队任意图像风格化迁移论文详解

点击蓝字关注我们AI研习图书馆&#xff0c;发现不一样的世界风格迁移图像风格化迁移是一个很有意思的研究领域&#xff0c;它可以将一张图的风格迁移到另外一张图像上&#xff0c;由此还诞生了Prisma和Ostagram这样的商业化产品。本文&#xff0c;我们将介绍谷歌大脑团队的一篇…