虽然循环的例子

时间:2009-12-09 07:46:37

标签: python while-loop prime-factoring

x = y // 2  # For some y > 1
while x > 1:
   if y % x == 0: # Remainder 
      print(y, 'has factor', x) 
      break  # Skip else
   x -= 1 
else: # Normal exit
   print(y, 'is prime')

这是一个理解我正在阅读的书中循环的一个例子,我不太明白为什么一个分区然后y%x?有人可以解释这段代码吗,它在做什么?

谢谢!

8 个答案:

答案 0 :(得分:4)

这是一个跛脚primality test

%是mod operator。它执行除法并返回余数而不是除法的结果。例如,5 // 2 == 2,和5%2 == 1。

评论:

x = y // 2  # For some y > 1  ##Reduce search space to half of y
while x > 1:
  if y % x == 0: # Remainder  ##If x divides y cleanly (4 / 2 == 2)
    print(y, 'has factor', x) ##y is not prime
    break  # Skip else        ##Exit the loop
  x -= 1   # Normal exit  ##Try the next value
else:
  print(y, 'is prime')

答案 1 :(得分:1)

逻辑是:

如果y modulo x为0,则表示x是y的dividor,因此y有一个因子。打印出来,并打破循环。

如果没有,请将x减1,然后重试。

但是这段代码中有些东西被破坏了:

  1. 其他陈述位置
  2. 'print y is prime'的事实是在循环之后 - 它将始终打印它。

答案 2 :(得分:1)

程序打印至少一个整数y的因子,或者如果它没有因子(除了它本身和1),打印y是素数。

它使用变量x来尝试大于1的所有可能因子。它从y的下限开始除以2,因为没有大于y的一半的数字可能是一个因素。如果y是奇数,使用正常除法而不是地板除法可以给出小数值。 (更好的解决方案是从y的平方根开始 - 如果y不是素数,其中一个因子将小于或等于其平方根。)

在循环内部,它测试y%x,这是将y除以x后的余数。如果余数为零,则表示x是y的因子,并打印出来。

else子句在循环结束时执行,除非找到一个因子,在这种情况下,“break”跳过循环和else子句。所以要么找到一个因子,要么就是它的主要因素。

以下是修改了缩进的改进代码:

import math

def check_primality(y):
  x = int(math.sqrt(y))
  while x > 1:
    if y % x == 0:                                                
      print y, 'has factor', x
      break
    x -= 1
  else:
    print y, 'is prime'

答案 3 :(得分:1)

代码只检查是否已达到x的平方根。请注意,您可以通过检查从2到x的平方根的整数是否完美地划分x(没有余数)来检查数字的素数。

答案 4 :(得分:1)

对于任何非素数的数字(x),将存在大于1且小于(x / 2)的因子。 9 = 3 * 3 逻辑是迭代所有数字< = x / 2并检查数字是否分开。

答案 5 :(得分:0)

我认为该计划试图找到y的最大素因子。 如果y是一个主要因素,它也会打印出来。

答案 6 :(得分:0)

x = y // 2用于测试x:2..y/2范围内的数字 更好的方法是仅测试数字x:2..sqrt(y)

答案 7 :(得分:0)

%表示一个模数,它给你剩余的除法......

并且此代码检查素数Y并检查Y是否是x的乘数...

x = y // 2#x = y的除法或模数,2

而x> 1:#你想检查这是一个除法结果还是一个模数

如果y%x == 0:#,如果y是x的乘数

  print(y, 'has factor', x) 

  break  # break the while loop

x -= 1 # decreament x 

else:#如果wihle达到x>则执行此行1并没有打破     print(y,'是prime')

所以如果y是x的乘数,它将递减x并且循环继续 否则它将打印y是素数