题意:

给你一个数n,找出来区间[1,n]内有多少书和n不互质

题解:

容斥原理

这一道题就让我真正了解容斥原理的实体部分 “容斥原理+枚举状态,碰到奇数加上(n-1)/lcm(a,b,c..) 碰到偶数减(n-1)/lcm(a,b,c...)” 这个是lcm(a,b,c,,,)可不是他们的乘积。。

注意了。。。 还有这道题输入会有0

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<queue>
7 using namespace std;
8 typedef long long ll;
9 const int maxn=100;
10 ll v[maxn],index;
11 ll gcd(ll a,ll b) //求最大公约数
12 {
13 return b==0?a:gcd(b,a%b);
14 }
15 /*
16 当得到a和b的最大公约数d之后, 可以马上得到a和b最小公倍数是(ab)/d.
17 */
18 ll lcm(ll a,ll b) //求最小公倍数
19 {
20 return a/gcd(a,b)*b;
21 }
22 ll get_result(ll n)//容斥原理
23 {
24 ll ans=0;
25 for(ll i=1; i< (1<<index) ; i++)
26 {
27 ll ones=0,mult=1;
28 for(ll j=0; j<index; j++)
29 {
30 if(i & (1<<j))
31 {
32 ones++;
33 mult=lcm(mult,v[j]);
34 }
35 }
36 if(ones&1)//奇数加,偶数减
37 ans+= n/mult;
38 else
39 ans-= n/mult;
40 }
41 return ans;
42 }
43 int main()
44 {
45 ll n;
46 while(~scanf("%lld%lld",&n,&index))
47 {
48 n--;
49 ll flag=0;
50
51 for(ll i=0;i<index;++i)
52 {
53 scanf("%lld",&v[i]);
54 if(v[i]==0)
55 {
56 index--;
57 i--;
58 }
59 else if(!flag && n%v[i]==0) flag=1;
60 }
61 printf("%lld\n",get_result(n));
62
63 }
64 return 0;
65 }

How many integers can you find HDU - 1796 容斥原理的更多相关文章

  1. HDU 1796 容斥原理 How many integers can you find

    题目连接   http://acm.hdu.edu.cn/showproblem.php?pid=1796 处男容斥原理  纪念一下  TMD看了好久才明白DFS... 先贴代码后解释 #includ ...

  2. HDU 1796 容斥原理

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  3. hdu 1796(容斥原理+状态压缩)

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  4. HDU 1796 (容斥原理)

    容斥原理练习题,忘记处理gcd 和 lcm,wa了几发0.0. #include<iostream> #include<cstdio> #include<cstring& ...

  5. HDU.1796 How many integers can you find ( 组合数学 容斥原理 二进制枚举)

    HDU.1796 How many integers can you find ( 组合数学 容斥原理 二进制枚举) 题意分析 求在[1,n-1]中,m个整数的倍数共有多少个 与 UVA.10325 ...

  6. HDU 1796 How many integers can you find (状态压缩 + 容斥原理)

    题目链接 题意 : 给你N,然后再给M个数,让你找小于N的并且能够整除M里的任意一个数的数有多少,0不算. 思路 :用了容斥原理 : ans = sum{ 整除一个的数 } - sum{ 整除两个的数 ...

  7. GCD HDU - 1695 容斥原理(复杂度低的版本)

    题意: 让你从区间[a,b]里面找一个数x,在区间[c,d]里面找一个数y.题目上已经设定a=b=1了.问你能找到多少对GCD(x,y)=k.x=5,y=7和y=5,x=7是同一对 题解: 弄了半天才 ...

  8. - Visible Trees HDU - 2841 容斥原理

    题意: 给你一个n*m的矩形,在1到m行,和1到n列上都有一棵树,问你站在(0,0)位置能看到多少棵树 题解: 用(x,y)表示某棵树的位置,那么只要x与y互质,那么这棵树就能被看到.不互质的话说明前 ...

  9. HDU 1796 How many integers can you find(容斥原理)

    题目传送:http://acm.hdu.edu.cn/diy/contest_showproblem.php?cid=20918&pid=1002 Problem Description    ...

随机推荐

  1. java8新特性之stream流

    Stream 流是 Java 8 提供给开发者一套新的处理集合的API,他把我们将要处理的集合作为流,就像流水线一样,我们可以对其中的元素进行筛选,过滤,排序等中间操作,只不过这种操作更加简洁高效. ...

  2. 区间合并 C++

    #include <iostream> #include <vector> #include <algorithm> using namespace std; ty ...

  3. 简单解析一下 Mybatis 常用的几个配置

    目录 核心配置文件 环境配置(environments) 属性(properties) 类型别名(typeAliases) 映射器(mappers) Mybatis 参考:https://mybati ...

  4. sa-token 之权限验证

    权限验证 核心思想 所谓权限验证,验证的核心就是当前账号是否拥有一个权限码 有:就让你通过.没有:那么禁止访问 再往底了说,就是每个账号都会拥有一个权限码集合,我来验证这个集合中是否包括我需要检测的那 ...

  5. Nacos使用和注册部分源码介绍

    Nacos简单介绍 Nacos致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理.Nacos帮助您更敏捷和容易地构建. ...

  6. ctfhub技能树—密码口令—弱口令

    什么是弱口令? "弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令. 弱口令指的是仅包含简单数字和 ...

  7. Request&Response总结

    Request&Response Request 请求对象的类视图 请求对象常用方法 获取请求路径 返回值 方法名 说明 String getContextPath() 获取虚拟目录名称 St ...

  8. SVM 支持向量机算法-实战篇

    公号:码农充电站pro 主页:https://codeshellme.github.io 上一篇介绍了 SVM 的原理和一些基本概念,本篇来介绍如何用 SVM 处理实际问题. 1,SVM 的实现 SV ...

  9. uni-app开发经验分享八: 实现微信APP支付的全过程详解

    背景 最近项目使用uni-app实现微信支付,把过程简单记录下,帮助那些刚刚基础uni-app,苦于文档的同学们.整体来说实现过程和非uni-app的实现方式没有太大不同,难点就在于uni-app对于 ...

  10. Vue基础之Vue的模板语法

    Vue基础之Vue的模板语法 数据绑定 01 数据绑定最常见的形式就是使用插值表达式(两个大括号!)[也就是小胡子语法!mustache] <body> <!-- Vue.js的应用 ...