码迷,mamicode.com
首页 > 其他好文 > 详细

求a,b在区间上的公倍数个数

时间:2014-12-05 17:14:51      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   sp   数据   div   log   

 

  给你两个数 a,b。问你区间 [1,N]中都是有多少个数是a,b的公倍数。当数据很大的时候,遍历肯定会超时。其实,我们可以首先求出 lcm(a,b)。因为我们知道(a,b)公倍数都是它最小公倍数的倍数。所以,我们只需要求[1,N]中lcm(a,b)的倍数------即在[1,N]中有多少个数能被lcm(a,b)整数。答案就是: N/lcm(a,b)。

  为不失一般性,我们把区间推广到[N,M]。那么我们显然是可以求[1,N]的值和[1,M]的值。然后减去重叠部分即可。

 

例子:

http://222.197.91.48/acmhome/problemdetail.do?&method=showdetail&id=1643

 

 1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 __int64 GCD(__int64 a, __int64 b)
 6 {
 7     if(b==0)
 8         return a;
 9     else return GCD(b, a%b);
10 }
11 
12 int main()
13 {
14     __int64 n, a, b;
15     while(~scanf("%I64d%I64d%I64d",&n, &a, &b))
16     {
17         __int64 len=a/GCD(a, b)*b;
18         printf("%I64d\n",n/len);
19     }
20     return 0;
21 }

 

求a,b在区间上的公倍数个数

标签:style   blog   http   io   color   sp   数据   div   log   

原文地址:http://www.cnblogs.com/khan724/p/4146999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!