输入三个数a,b,n,输出a和b不大于n的公倍数的个数

题:输入三个数a,b,n,输出a和b不大于n的公倍数的所有个数。

这题的思想是先求得a和b的最大公约数,然后用a和b的积除以最大公约数,得到最小公倍数,再持续加上最小公倍数,直到超过n,记下n的个数。如:8,12,100,最大公约数为4,则最小公倍数为24。则公倍数为:24、48、72、96,即总共有4个。

代码如下:

 1 #include<iostream>
 2 #include<algorithm>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int a, b, n;
 9     cin >> a >> b >> n;
10     int minVal = min(a, b);
11     int maxVal = max(a, b);
12     int tem = 0;        //最小公倍数
13     int val = 0;        //最大公约数
14     
15     if (maxVal%minVal == 0)
16         tem = maxVal;
17     else
18     {
19         while (maxVal%minVal != 0)
20         {
21             val = maxVal%minVal;
22             maxVal = minVal;
23             minVal = val;
24         }
25         tem = a*b / minVal;
26     }
27 
28     int count = 1;
29     while (tem *count<= n)
30     {
31         count++;
32     }
33     cout <<count-1;
34     return 0;
35 }

还有一种直接的解法

 1 #include<iostream>
 2 #include<algorithm>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int a, b, n;
 9     cin >> a >> b >> n;
10     int maxVal = max(a, b);
11     int count = 0;
12     while (maxVal <= n)
13     {
14         if (maxVal%a == 0 && maxVal%b == 0)
15             count++;
16         maxVal++;
17     }
18     cout << count;
19     return 0;
20 }

 以后一定要先想最简单的做法。

//招商信用

posted @ 2017-09-13 21:59  王大咩的图书馆  阅读(403)  评论(0编辑  收藏  举报