wuyan12 发表于 2022-10-13 17:23:27

小白求帮助

for i in range(100,1000):
    j=2
    flag=1
    while j<i:
      if i % j==0:
            flag=0
            break

      j+=1
      
    if flag==1:
      print(i,end=" ")

这段代码用于输出100-1000素数
其中的
j = 2
flag = 1
和后面的
flag = 0
flag == 1
有什么作用 j = 3或者 j = 5 输出也是一样的
实在看不懂

dami27 发表于 2022-10-13 17:23:28

看一下下面的注释

for i in range(100,1000):
    j=2             #素数只能被1和本身整除,所以需要除一下2到n-1之间所有的数,所以初始值设为2
    flag=1         #这是素数与否的标志,当flag为1时,设定该数为素数,打印
    while j<i:
      if i % j==0:      #判断是否为素数,结果就为0就是能被整除
            flag=0            #因为能被整除所以不是素数,flag赋值为0
            break               #不是素数,所以跳出循环,进行下一个数的判断

      j+=1
      
    if flag==1:             #flag=1是素数,所以打印出来
      print(i,end=" ")

灰晨 发表于 2022-10-13 17:59:38

while j<i:
      if i % j==0:
            flag=0
            break

      j+=1
每次循环 j 会 +1,循环条件为 j < i , j 一开始是 j = 2,也就是说,这个循环的 j 就是 2到 i -1
这个循环就是将 i 去除于2到 i-1的数(j),看能不能整除,能就代表 i 不是素数,所以将flag赋值为0
循环结束后判断,flag是否为1,为1,就证明在上面的循环里,i从2到i-1都不被整除,所以是素数,打印
不为1,就代表在上面循环里,i 除于某个2到i-1的数等于0,不是素数,不打印
之后就是for循环下一个i进来

dragov 发表于 2022-10-13 18:17:24

【1】j=2 的含义:将所有的数据(100-1000)从2开始筛查,所以 j=2

【2】flag=1的含义:这是一个标志,只要是筛查到素数了,flag=1,立即打印此素数

【3】flag=0的含义:当检测不是素数时,立即赋值为0,结束当前循环,进入到下一个数值的筛查

【4】flag==1的含义:这是进行判断比较,flag=1时证明是素数,进行打印输出

【5】j=3、j=5 的含义:对素数的判断检测,要让它分别除以任何一个数字,看看有没有余数,所以3、5必不可少

页: [1]
查看完整版本: 小白求帮助