Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python While循环示例_Python_While Loop_Prime Factoring - Fatal编程技术网

Python While循环示例

Python While循环示例,python,while-loop,prime-factoring,Python,While Loop,Prime Factoring,这是一个理解while循环的例子,在我正在阅读的一本书中,我不太明白为什么要划分楼层,然后是y%x?谁能解释一下这段代码,它在做什么 谢谢 这是一个跛脚的人 %是的。它执行除法并返回余数,而不是除法的结果。例如,5//2==2和5%2==1 评论: x = y // 2 # For some y > 1 while x > 1: if y % x == 0: # Remainder print(y, 'has factor', x) break

这是一个理解while循环的例子,在我正在阅读的一本书中,我不太明白为什么要划分楼层,然后是y%x?谁能解释一下这段代码,它在做什么

谢谢

这是一个跛脚的人

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

评论:

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为0,则意味着x是y的除数,因此y有一个因子。打印出来,然后打破循环

如果不是,请将x减小1,然后重试

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

else语句的位置 “print y is prime”在循环之后,它将始终打印它。
我认为该计划试图找出y的最大主要因素。 如果y是素数因子,它也会打印出来。

x=y//2用于测试x:2..y/2范围内的数字。
更好的方法是只测试数字x:2..sqrty

程序至少打印整数y的一个因子,或者如果它没有除自身和1以外的因子,则打印y为素数

它使用变量x来尝试所有大于1的可能因素。它从y除以2开始,因为任何大于y的一半的数字都不能成为因子。如果y是奇数,使用普通除法而不是楼层除法可以得到一个分数。更好的解决方案是从y的平方根开始——如果y不是素数,它的一个因子将小于或等于它的平方根

在循环内部,它测试y%x,这是y除以x后的余数。如果余数为零,这意味着x是y的一个因子,它会打印它

除非找到一个因子,否则else子句将在循环结束时执行,在这种情况下,break将跳出循环并跳出else子句。所以要么找到一个因子,要么就是素数

下面是修正缩进的改进代码:

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')

代码只是检查是否已达到x的平方根。请注意,您可以通过检查从2到x的平方根的整数是否完全不带余数地除以x来检查数字的素性。

表示一个模数,它给出除法的余数

这段代码检查素数Y,也检查Y是否是x的乘法器

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

当x>1时:要检查这是除法结果还是模数

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

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'
else:如果wihle达到x>1且未中断,则执行此行 普林蒂,“是质数”

因此,如果y是x的乘数,它将减小x,循环将继续
否则它将打印y为素数

对于任何非素数的数字x,将有一个大于1小于x/2的因子。 9 = 3*3
逻辑是遍历编辑器注意到的所有数字,else子句应该与while语句内联,而不是if语句,这是C:-这个答案没有多大帮助,因为代码是错误的:它打印y是素数,即使它不是。x-=1 else://SyntaxError:无效语法,如果你想优化,你可以在x>1时将其改为s=sqrty,而x>sdmazzoni:else在错误的位置。这件事已经解决了。奥弗里·拉维夫:你说得对。这是一个糟糕的素性测试,这是它的正常优化。其他的则包括记忆或其他形式的缓存。如果y非常大,则需要比修改的sieve方法更聪明的方法。您可能需要注意,您的代码在2.*下无法工作。
  print(y, 'has factor', x) 

  break  # break the while loop

x -= 1 # decreament x