2014-09-25 4 views
0

3 번 이후에 첫 번째 "n"소수를 생성하려고합니다. 문제가 어디에서 잘못되었는지 이해할 수 있으며 누군가 논리를 도울 수 있다면 감사하겠습니다.파이썬 소수 번호 코드

a = 3 
b = 2 

# n = number of prime numbers to be printed. 
n = 1000 

for a in range(a, n): #This i the range of all numbers to be tested 
    if a % 2 == 0:  #Only odd numbers are prime(except 2) so eliminate the evens 
     print "." 
else: 
    for b in range(b, a): #This is to test the odd numbers 
     if (a % b == 0): #I am dividing a by all numbers smaller than it to test 
      print a, "is not prime" 
      break 

이 문제를 해결하는 데 도움이되는 모든 안내는 크게 감사하겠습니다. 이 질문에 대한 이전 게시물을 읽었지 만, 특히 내 논리에 결함이있는 곳을보고 싶었습니다.

감사합니다.

+2

이 코드가 실제로 보이는 경우 'else'에는 들여 쓰기가 잘못되었습니다. –

+0

들여 쓰기가 잘못되었습니다! else는'if' 아래에 있어야합니다. – Kasramvd

+0

아래 범위와 인덱서에 동일한 변수를 사용하여'for range (a, n) :'를하지 말 것입니다. 그것은해야 할 일을합니다. 또한 첫 번째'n' 소수를 찾지 않고'n'까지 소수를 찾습니다. – mixedmath

답변

0

여기에 몇 가지 문제가 있다고 생각합니다.

다른 사람의 경우 들여 쓰기가 잘못되었습니다.

또한 루프에서 사용하는 변수 이름을 변경하여 스크립트 맨 위에 정의 된 a 및 b를 사용하지 마십시오. 차이점을 확인해야합니다.

그것은해야한다 :

a = 3 
b = 2 

n = 1000 

for ax in range(a, n): 
    if ax % 2 == 0: 
     print "." 
    else: 
     for bx in range(b, ax): 
      if (ax % bx == 0): 
       print ax, "is not prime" 
       break 

또한 문제의이 종류를 디버깅에 도움이되어야 휴식 후 또 다른 추가.

+0

도움을 많이 주셔서 감사합니다. 뉘앙스를 이해할 때까지 코드를 재 작업 할 것입니다. – zigzagdoom

+0

그 이유는 원래 코드와이 코드를 사용하여 각 단계에서 a 및 b 값을 인쇄해야하는 이유입니다. 그것이 도움이된다고 생각한다면 대답을 upvote하십시오. –

+0

다시 한번 감사드립니다. upvote 겠지만 더 많은 담당자가 필요합니다. – zigzagdoom

0

먼저 들여 쓰기를 확인해야합니다. 내 생각에이 코드는 다음과 같습니다.

for a in range(a, n): #This i the range of all numbers to be tested 
    if a % 2 == 0:  #Only odd numbers are prime(except 2) so eliminate the evens 
     print "." 
    else: 
     for b in range(b, a): #This is to test the odd numbers 
      if (a % b == 0): #I am dividing a by all numbers smaller than it to test 
       print a, "is not prime" 
       break 

이 코드는 저에게 의미가 있습니다. 첫 번째 인쇄본도 수정해야합니다.

if a % 2 == 0:  #Only odd numbers are prime(except 2) so eliminate the evens 
     print a, "is not prime" 

이제 로직을 볼 수 있습니다. a가 짝수이면 소수가 아니기 때문에 a = 2로 시작할 수 없습니다. 그런 다음 그것이 이상한 경우, 그것을 나눌 수있는 수보다 적은 수를 확인하십시오.

더 나은 알고리즘이 있습니다. this을 확인하십시오.

+0

고마워요. 알고리즘의 경우. 나는 그것을 시도하고 구현할 것이다. – zigzagdoom

0

여기에 일부 코드입니다 :

import math 
import itertools 

def isprime(m): 
    return not any((m % d == 0 for d in range(2, int(math.sqrt(m)+1)))) 

def genprimes(n): 
    i = 0 
    for m in itertools.count(2): # 2, 3, 4, ... 
     if i >= n: 
      return 
     if isprime(m): 
      yield m 
      i += 1 

list(genprimes(10)) 

실행 분명히

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29] 
+0

고마워요 !!! – zigzagdoom

0
n = 1000 
    primes = [] 
    nonprime = [] 

    def prime(nonprime, primes, n): 
     nonprime.append(0) 
     nonprime.append(1) 
     nonprime.append(2) 
     primes.append(3) 
     for number in range(3, n): 
      if (number % 2 == 0): 
       nonprime.append(number) 
      else: 
       counter = 3 
       while counter <= number: 
        if (counter != number) and (number % counter == 0): 
         nonprime.append(number) 
         break 
        elif (number % counter == 1) and (counter >= number/2): 
         primes.append(number) 
         break 
        else: 
         counter += 1 

     print "primes are : ", primes 
     print "nonprimes are : ", nonprime 

    if __name__ == "__main__": 
     prime(nonprime, primes, n) 

없는 가장 효율적인 생성합니다. 잘하면 그것은 어떻게 든 도움이 될 수 있습니다.