ACM: How many integers can you find-数论专题-容斥原理的简单应用+GCD
Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Input
Output
Sample Input
12 2
2 3
Sample Output
7
/*/
题意:
给出N和M 输入M个数,找出所有M个数的倍数并且,Mi的倍数小于N,输出所有数的总个数。 如果一个数同时是三个数的倍数
单独记一个数的倍数次数为C(3,1) =3
记两个数的倍数次数为 C(3,2)=3
记三个数的倍数次数为 C(3,3)=1
3-3+1=1,只记一次依次类推 一个数为5个数的倍数
C(5,1)=5
C(5,2)=10
C(5,3)=10
C(5,4)=5
C(5,5)=1
5-10+10-5+1=1 六个数
C(6,1)=6
C(6,2)=15
C(6,3)=20
C(6,4)=15
C(6,5)=6
C(6,6)=1
6-15+20-15+6-1=1
上图:
然后因为数字不超过10个,可以运用枚举子集的思想去做这个题目。
所以用到DFS。
最后有一个地方要注意就是在DFS里面判断积这里,要用GCD,一开始没想到过不了样例。 AC代码:
/*/
#include"map"
#include"cmath"
#include"string"
#include"cstdio"
#include"vector"
#include"cstring"
#include"iostream"
#include"algorithm"
using namespace std;
typedef long long LL; LL a[15];
int n,m,cnt;
LL ans,x; LL gcd(LL a,LL b){
return b?gcd(b,a%b):a;
} void DFS(int x,LL axb,int num) {
axb=a[x]/gcd(a[x],axb)*axb;
if(num&1) ans+=(n-1)/axb;
else ans-=(n-1)/axb;
// cout<<"now ans is:"<<ans<<endl; //检查
for(int i=x+1; i<cnt; i++)
DFS(i,axb,num+1);
} int main() {
while(~scanf("%d%d",&n,&m)) {
ans=0;
cnt=0;
for(int i=0; i<m; i++) {
scanf("%I64d",&x);
if(x!=0)a[cnt++]=x;
}
for(int i=0; i<cnt; i++){
DFS(i,a[i],1); //用DFS去枚举每种选择的情况。
}
printf("%d\n",ans);
}
return 0;
}
ACM: How many integers can you find-数论专题-容斥原理的简单应用+GCD的更多相关文章
- 【数论Day1】 最大公约数(gcd)题目
20170529-3数论_gcd 题解: http://www.cnblogs.com/ljc20020730/p/6919116.html 日期 序号 题目名称 输入文件名 输出文件名 时限 内存 ...
- ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德
POJ 1061 青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & %llu Descr ...
- ACM学习历程—HDU 5446 Unknown Treasure(数论)(2015长春网赛1010题)
Problem Description On the way to the next secret treasure hiding place, the mathematician discovere ...
- ACM学习历程—HDU 5317 RGCDQ (数论)
Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more an ...
- ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄∀ ̄))
gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm ( gcd就是gcd(a, b), ( •̀∀•́ ) ...
- ACM学习历程—BZOJ2956 模积和(数论)
Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...
- 数论(容斥原理)hdu-4509-The Boss on Mars
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4059 题目大意: 给一个n,求1~n中与n互质的数的4次方的总和. 解题思路: 容斥原理.逆元.公式 ...
- 邝斌带你飞之数论专题--Maximum GCD UVA - 11827
Given the N integers, you have to find the maximum GCD (greatest common divisor) of every possible p ...
- NOIP2018提高组金牌训练营——数论专题
地址 https://www.51nod.com/live/liveDescription.html#!liveId=23 1187 寻找分数 给出 a,b,c,d, 找一个分数p/q,使得a/b & ...
随机推荐
- HTML5 – 1.基础
新网页结构 1.<header> 定义了文档的头部区域 2.<nav>标签定义导航链接的部分. 3.<article>定义页面独立的内容区域. 4.<sect ...
- ARPPING
http://www.tuicool.com/articles/M7B3umj http://lixcto.blog.51cto.com/4834175/1571838/
- android:installLocation = "auto" 的用法
在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置. android:inst ...
- SQL中的JOIN类型解释(CROSS, INNER,OUTER),关键字ON,USING
书上讲得明白,解了不少迷惑. SELECT e.fname, e.lname, d.name FROM employee AS e INNER JOIN department AS d ON e.de ...
- 【20140113】package 与 import
一个完整的java源程序应该包括下列部分: package语句: //该部分至多只有一句,必须放在源程序的第一句 import语句: public classDefinition: //公共类定义部分 ...
- dbca:Exception in thread "main" java.lang.UnsatisfiedLinkError: get
在64位的操作系统安装oracle10g 软件安装完成后,使用dbca建库的时候报下面的错: $ dbcaUnsatisfiedLinkError exception loading native l ...
- 为什么是 n(n+1)/2 ?
n(n+1)/2是一个数列的元素两两运算后的不重复结果数.如图: 假如数列a = 1,2,3....n.那么该数列内的元素两两相乘,则会构建出上图中的表格,这个表格应该有n x n 个元素. 用程序写 ...
- phpcms v9最常用的22个调用代码
新源网络工作室友情总结phpcms v9最常用的22个调用代码: 调用最新文章,带所在版块{pc:get sql="SELECT a.title, a.catid, b.catid, b.c ...
- 第十五篇:在SOUI中消息通讯
SOUI是一套基于Win32 SDK的窗口开发的一套DirectUI框架.在SOUI中除了有真窗口使用窗口消息通讯机制外,还有SOUI控件之间的通讯,及控件的事件处理等. 1.真窗口消息通讯 因此可以 ...
- url地址中 "&" "/"等符号的转义处理(转)
URL出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好? 解决办法:将这些字符转化成服务器可以识别的字符,对应关系如下: URL中的特殊字 ...