解题思路:

“求最大公因数和最小公倍数”这个问题相信大家都已经学过了,就是利用短除法分解质因数。这对于我们人来说非常简便,但机器可以死算(相当于枚举算法),所以我们可以用枚举算法。最简单的也就是这么写:

参考代码:

a, b = map(int, input().split())
s = 1
n = 1



for i in range(2, a):
    if a % i == 0 and b % i == 0:

        s = i

if a > b:

    n = a * 2
    while n % b != 0:

        n += a

else:

    n = b * 2
    while n % a != 0:
        n += b
    print(s, n)

但如果你输入“600000000000000 300000000000000000”会怎么样呢?

此程序一定会执行很久。我们人一下子就能看出来最大公因数是600000000000000,最小公倍数是300000000000000000。但此程序不能一下子判断出来。所以我们可以让程序执行的速度更快些。

参考代码:

a, b = map(int, input().split())
s = 1
n = 1

if a % b == 0:
   print(b, a)
elif b % a == 0:
   print(a, b)
else:
   if a > b:
       for i in range(2, b):
           if a % i == 0 and b % i == 0:
               s = i
       n = a * 2
       while n % b != 0:
           n += a
       print(s, n)
   else:
       for i in range(2, a):
           if a % i == 0 and b % i == 0:
               s = i
       n = b * 2
       while n % a != 0:
           n += b
       print(s, n)

我门都知道相邻的两个自然数(0除外)都互质,相邻的两个自然数都相差1,他们的公因数只有1,最小公倍数就是他们相乘。

如果你输入“600000000000000 599999999999999”会怎么样呢?

此程序也一定会执行很久。所以我们还可以让程序执行的速度更快些。

参考代码:

a, b = map(int, input().split())
s = 1
n = 1

if a % b == 0:
   print(b, a)
elif b % a == 0:
   print(a, b)
elif a - b == 1 or b - a == 1:
   print(s, a * b)
else:
   if a > b:
       for i in range(2, b // 2 + 1):
           if a % i == 0 and b % i == 0:
               s = i
       n = a * 2
       while n % b != 0:
           n += a
       print(s, n)
   else:
       for i in range(2, a // 2 + 1):
           if a % i == 0 and b % i == 0:
               s = i
       n = b * 2
       while n % a != 0:
           n += b
       print(s, n)

程序不能光看结果,还要看效率,不然就不实用。准确率高、效率高,这样的程序才“像样”。

点赞(0)
 

0.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

DrV 2年前 回复TA
n一开始应该是等于a或b而不是2*a或2*b,否则输入1 1 得到的是1 2