【问题标题】:Incremental Counting of Prime Numbers质数的增量计数
【发布时间】:2020-01-11 16:36:50
【问题描述】:

我有以下代码:

count = 0

while True:
    number = int(input("Enter The Number: "))

    if number > 1:
        for i in range(2,int(number/2)):
            if (number % i == 0):
                print(number, "is not a Prime Number")
                break
        else:
            print(number,"is a Prime number")
            count = count + 1
    else:
        print(number,"is not a Prime number")

    print("Total number of prime number counted : {0}".format(count))

当用户输入一个数字时,它会检查该数字是否为质数。如果是,它将增加计数。这段代码有问题,如果我输入 4,它的计数会增加 1。4 不是质数。

一直试图弄清楚为什么会发生这种情况,但我做不到。如果我从代码中完全删除计数,它能够检查 4 不是素数。

为什么 count 会导致这个问题?

【问题讨论】:

  • 您有缩进问题;对齐else: print(number, "is a Prime number") 块的缩进,它应该按照你的意图运行
  • @THK 不,这是循环终止 else,而不是 if else。顺便说一句,除以 2 是一个很好的优化,但实际上你只需要测试包括 sqrt(number) 在内的因子,这会给你一个渐近加速

标签: python python-3.x


【解决方案1】:

number 为4 时,range(2,int(number/2)) 等于range(2, 2),并且不执行任何循环,代码继续到else

【讨论】:

    【解决方案2】:

    正确的代码是:

    count = 0
    
    while True:
        number = int(input("Enter The Number: "))
    
        if number > 1:
            for i in range(2,int(number/2)+1):
                if (number % i == 0):
                    print(number, "is not a Prime Number")
                    break
            else:
                print(number,"is a Prime number")
                count = count + 1
        else:
            print(number,"is not a Prime number")
    
        print("Total number of prime number counted : {0}".format(count))
    

    您必须将 +1 添加到 int(number/2),因为如果数字为 4,则循环从 i=2 执行直到 iDocumentation)。 总之,当数字为 4 时,执行 else 块。

    【讨论】:

      【解决方案3】:

      问题在于您计算数字是否为质数的方式,ifelse 语句是正确的,只需像这样更改range

      count = 0
      
      while True:
          number = int(input("Enter The Number: "))
      
          if number > 1:
              for i in range(2, number):
                  if (number % i == 0):
                      print(number, "is not a Prime Number")
                      break
              else:
                  print(number,"is a Prime number")
                  count = count + 1
          else:
              print(number,"is not a Prime number")
      
          print("Total number of prime number counted : {0}".format(count))
      

      【讨论】:

      • 好吧,这个变化会带来不必要的 2 倍性能损失,当一个 +1 来补偿范围内的结束参数是独占时,就足够了。
      猜你喜欢
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多