993 How many integers can you find
2015-07-30 00:43
309 查看
How many integers can you find
时间限制:1000 ms | 内存限制:65535 KB难度:1
描述
给你三个数,n,m1,m2,找出所有小于n的能被m1或m2整除的数的个数。
输入输入包含多组测试数据,每组数据占一行。
0<n<2^31,0<m1,m2<=10。
输出每组数据输出占一行。
样例输入
12 2 3
样例输出
7
这个题考察的比较巧妙,求有 1到n (不包括 n )中有多少个数能整除 a 或 b ,那么就直接用 n-1 除以a,加上 n-1除以b,再减去 n-1 除以他们的最小公倍数,具体为什么自己想,这个很好想这个规律的....嘿嘿....
注意n比较大,其他方法会超时的,只有这个规律可以搞定!
超时代码....
这样枚举很实用,但是有时候效率太低...
#include<stdio.h>
int main()
{
int i,n,m1,m2,s;
while(scanf("%d%d%d",&n,&m1,&m2)!=EOF)
{
s=0;
for(i=1;i<n;i++)
{
if(i%2==0||i%3==0)
s++;
}
printf("%d\n",s);
}
return 0;
}
ac代码:
#include<stdio.h> int gcd(int a,int b) { for(int i=a%b;i!=0;i=a%b) { a=b;b=i; } return b;//返回的是最大公约数 } int gbd(int a, int b) { return a/gcd(a,b)*b;//这样写是为了防止溢出.... } int main() { int n,a,b,s; while(~scanf("%d%d%d",&n,&a,&b)) { --n;//边界舍去.. s=n/a+n/b-n/gbd(a,b);//求出结果... printf("%d\n",s); } return 0; }
相关文章推荐
- !HDU 4173 到点的距离不超过2.5,找最多能被满足的点的个数-简单几何
- 心跳包机制整理汇总
- 复盘eygle在甲骨文大会上演讲中的示例,看看什么是大师的由点及面
- hd1372 Knight Moves
- ASP.NET MVC 框架入门——写一个搜索引擎
- ural1960Palindromes and Super Abilities(回文树)
- Hadoop家族包含的子项目及其主要功能
- iPhone 适配之路
- 对话框实现登陆
- LMA与VMA总结
- Javascript操作iframe
- FutureTask类源代码
- javascript 语言精粹 笔记推荐。。
- Javascript中理解发布--订阅模式
- OSI Network Layer
- Android Camera 使用小结
- 本文大部分参考自 http://blog.csdn.net/mayingcai1987/article/details/6200909 ,对原文中的讲解FLAG_NEW_TASK地方加了一些自己的观点
- poj 3311 Hie with the Pie 【状态dp + 最短路floyd】
- 纯粹的 K12 精髓:从马列主义角度分析如何教孩子看图写话
- [HAOI2007]反素数ant