December


私信TA

用户名:zzqzz

访问量:1429

签 名:

编程是掌控未来的钥匙。

等  级
排  名 28044
经  验 498
参赛次数 0
文章发表 2
年  龄 12
在职情况 学生
学  校 湖南省怀化市宏宇小学
专  业

  自我简介:

解题思路:

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

参考代码:

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分

3 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

n一开始应该是等于a或b而不是2*a或2*b,否则输入1 1 得到的是1 2
2022-06-21 11:30:54
  • «
  • 1
  • »