jcpython2 发表于 2022-9-16 23:35:06

求最小公倍数

s = input().split()
x,y,z =int(s),int(s),int(s)
n = 1
while True:
    if n % x == 0 and n % y == 0 and n % z == 0:
      print(n)
      break
    n = n+ 1

以上是正确代码,我想改写一下

然后我改为以下错误代码

s = input().split()
x,y,z =int(s),int(s),int(s)
n = 1
while n % x != 0 and n % y != 0 and n % z != 0:
   n += 1
print(n)


然后我又改为以下对的代码
s = input().split()
x,y,z =int(s),int(s),int(s)
n = 1
while not (n % x == 0 and n % y == 0 and n % z == 0):
   n += 1
print(n)



我的理解是

while n % x != 0 and n % y != 0 and n % z != 0:

while not (n % x == 0 and n % y == 0 and n % z == 0):

是相同的,懵了

ba21 发表于 2022-9-17 00:01:20

s = input().split()
x,y,z =int(s),int(s),int(s)
n = 1
while not(n % x == 0 and n % y == 0 and n % z == 0):
    n = n+ 1
print(n)

dolly_yos2 发表于 2022-9-17 09:01:04

把条件写明可能会对明白问题更有帮助。
n % x != 0 and n % y != 0 and n % z != 0 表达的是 n 既不是 x 的倍数,也不是 y 的倍数,还不是 z 的倍数。如果 n 是其中任何一个的倍数,该表达式就会求值为假,但此时的 n 并不一定是三者的公倍数。
相反, not (n % x == 0 and n % y == 0 and n % z == 0) 表示 n 不满足 n 是 x 的倍数,也是 y 的倍数,还是 z 的倍数,则当此表达式求值为假时 n 必然既是 x 的倍数,也是 y 的倍数,还是 z 的倍数,即三者的公倍数。
这是比较基础的逻辑运算问题,您可能会愿意了解一下德·摩根律,它会告诉您如何正确移除此类表达式外部的 not () 。
页: [1]
查看完整版本: 求最小公倍数