2017-12-09 10 views
0

与えられた範囲内のすべての素数を印刷するプログラムを作成しようとしています。私はそれを書いた、出力はほとんどOKです、それは素数を印刷しますが、何らかの理由でそれは素数ではない4を印刷します... どのアシスタントが高く評価されます!範囲内のすべての素数

def primes(): 
    start = int(input("Enter the starting number: ")) 
    end = int(input("Enter the ending number: ")) 
    num = 0 
    i = 0 
    ctr = 0 
    for num in range(start,end+1,1): 
     ctr = 0 
     for i in range(2,num//2,1): 
      if num % i == 0 : 
       ctr = ctr + 1 
       break 
     if (ctr==0 and num != 1): 
      print(num) 
+3

にあなたの範囲を変更することができます(2、NUM // 2)' – user3080953

答えて

0
for i in range(2,num//2,1): 

ときNUM = 4のコードスニペットを確認できます、それは今、私たちが問題を見

for i in range(2,2,1): 

になります。 解決策..?

for i in range(2,(num//2)+1,1): 
0

次のメソッドは、あなたの範囲内でチェックするために使用する可能性のあるすべての可能なプライムチェッカーです:

線の上
def isPrime(Number): # slow 
    return 2 in [Number, 2 ** Number % Number] 


def isprime(n): # out of memory errors with big numbers 
    """check if integer n is a prime""" 
    # make sure n is a positive integer 
    n = abs(int(n)) 
    # 0 and 1 are not primes 
    if n < 2: 
     return False 
    # 2 is the only even prime number 
    if n == 2: 
     return True 
     # all other even numbers are not primes 
    if not n & 1: 
     return False 
    # range starts with 3 and only needs to go up the squareroot of n 
    # for all odd numbers 
    for x in range(3, int(n ** 0.5) + 1, 2): 
     if n % x == 0: 
      return False 
    return True 


def is_prime(n): # Best until now 
    if n == 2 or n == 3: 
     return True 
    if n < 2 or n % 2 == 0: 
     return False 
    if n < 9: 
     return True 
    if n % 3 == 0: 
     return False 
    r = int(n ** 0.5) 
    f = 5 
    while f <= r: 
     # print '\t', f 
     if n % f == 0: 
      return False 
     if n % (f + 2) == 0: 
      return False 
     f += 6 
    return True 
0
for i in range(2,num//2,1): 

は間違っています。 2からnum/2 - 1まで繰り返しています。
2からsqrt(num)まで繰り返す必要があります。 (range(2, int(math.sqrt(n)) + 1)
はまた、あなたが `2のための特別なチェックを行い、ループのためのあなたの内側の境界をプリントアウトしてみrange(3, int(math.sqrt(n) + 1, 2)

0
min = int(input("Enter lower range: ")) 
max = int(input("Enter upper range: ")) 

print("Prime number(s) between",min,"and",max,"is/are:") 

for num in range(min,max + 1): 
    if num > 1: 
    for i in range(2,num): 
     if (num % i) == 0: 
      break 
    else: 
     print(num) 
関連する問題