복붙노트

[PYTHON] 파이썬 프라임 번호 검사기 [duplicate]

PYTHON

파이썬 프라임 번호 검사기 [duplicate]

나는 입력 된 숫자를 취할 프로그램을 작성하고 그것이 소수인지 점검하고 확인하려고 노력 해왔다. 숫자가 실제로 소수라면 제가 만든 코드가 완벽하게 작동합니다. 숫자가 소수가 아닌 경우 이상하게 작동합니다. 누군가 코드에 어떤 문제가 있는지 말할 수 있는지 궁금합니다.

a=2
num=13
while num > a :
  if num%a==0 & a!=num:
    print('not prime')
    a=a+1
  else:
    print('prime')
    a=(num)+1

24가 입력 될 때 주어진 결과는 다음과 같습니다. 프라임하지 마라. 프라임하지 마라. 프라임하지 마라. 초기

어떻게 모든 이상한에 대한보고 프라임과 오류를 해결하고 심지어 모든 프라임되지 않습니다

해결법

  1. ==============================

    1.숫자가 소수가 아닌 것을 알고 나면 반복을 중지해야합니다. while 루프를 종료하려면 소수를 찾으면 휴식을 추가하십시오.

    숫자가 소수가 아닌 것을 알고 나면 반복을 중지해야합니다. while 루프를 종료하려면 소수를 찾으면 휴식을 추가하십시오.

    코드가 변경되도록 최소한의 변경 만하면됩니다.

    a=2
    num=13
    while num > a :
      if num%a==0 & a!=num:
        print('not prime')
        break
      i += 1
    else: # loop not exited via break
      print('prime')
    

    귀하의 알고리즘은 다음과 같습니다 :

    for a in range(a, num):
        if a % num == 0:
            print('not prime')
            break
    else: # loop not exited via break
        print('prime')
    

    함수에 던져 넣으면 break와 for-else를 없앨 수 있습니다 :

    def is_prime(n):
        for i in range(3, n):
            if n % i == 0:
                return False
        return True
    

    이런 식으로 프라임에 대해 무차별 대입을 수행한다고해도 n의 제곱근까지만 반복하면됩니다. 또한 짝수를 두 번 테스트하지 않고 건너 뛸 수 있습니다.

    제안 사항 :

    import math
    def is_prime(n):
        if n % 2 == 0 and n > 2: 
            return False
        for i in range(3, int(math.sqrt(n)) + 1, 2):
            if n % i == 0:
                return False
        return True
    

    이 코드는 0, 1 및 음수를 올바르게 처리하지 않습니다.

    for 루프를 대체하기 위해 생성기 표현식을 사용하여 all을 사용하면 더 간단 해집니다.

    import math
    def is_prime(n):
        if n % 2 == 0 and n > 2: 
            return False
        return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))
    
  2. ==============================

    2.

    def isprime(n):
        '''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 square root 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
    

    취한 것 :

  3. ==============================

    3.코드의 두 가지 주요 문제점은 다음과 같습니다.

    코드의 두 가지 주요 문제점은 다음과 같습니다.

    몇 가지 매우 비효율적 인 비효율 :

  4. ==============================

    4.

    def is_prime(n):
        return all(n%j for j in xrange(2, int(n**0.5)+1)) and n>1
    
  5. ==============================

    5.이 예제는 reduce ()를 사용하지만 속도를 늦 춥니 다.

    이 예제는 reduce ()를 사용하지만 속도를 늦 춥니 다.

    def makepnl(pnl, n):
        for p in pnl:
            if n % p == 0:
                return pnl
        pnl.append(n)
        return pnl
    
    def isprime(n):
        return True if n == reduce(makepnl, range(3, n + 1, 2), [2])[-1] else False
    
    for i in range(20):
        print i, isprime(i)
    

    Sieve Of Atkin을 사용합니다.

    def atkin(limit):
        if limit > 2:
            yield 2
        if limit > 3:
            yield 3
    
        import math
        is_prime = [False] * (limit + 1)
    
        for x in range(1,int(math.sqrt(limit))+1):
            for y in range(1,int(math.sqrt(limit))+1):
                n = 4*x**2 + y**2
    
                if n<=limit and (n%12==1 or n%12==5):
                    # print "1st if"                                                                                                                    
                    is_prime[n] = not is_prime[n]
                n = 3*x**2+y**2
                if n<= limit and n%12==7:
                    # print "Second if"                                                                                                                 
                    is_prime[n] = not is_prime[n]
                n = 3*x**2 - y**2
                if x>y and n<=limit and n%12==11:
                    # print "third if"                                                                                                                  
                    is_prime[n] = not is_prime[n]
    
        for n in range(5,int(math.sqrt(limit))):
            if is_prime[n]:
                for k in range(n**2,limit+1,n**2):
                    is_prime[k] = False
    
        for n in range(5,limit):
            if is_prime[n]: yield n
    
    def isprime(n):
        r = list(atkin(n+1))
        if not r: return False
        return True if n == r[-1] else False
    
    for i in range(20):
        print i, isprime(i)
    
  6. ==============================

    6.문제는 이미 "마음을 굳혔다"고 생각하더라도 루프가 계속 실행된다는 것입니다. a = a + 1 뒤에 줄 바꿈을 추가해야합니다.

    문제는 이미 "마음을 굳혔다"고 생각하더라도 루프가 계속 실행된다는 것입니다. a = a + 1 뒤에 줄 바꿈을 추가해야합니다.

  7. ==============================

    7.초급 여기, 그래서 만약 내가 방법입니다 알려주지 만, 나는 이런 식으로 할거야 :

    초급 여기, 그래서 만약 내가 방법입니다 알려주지 만, 나는 이런 식으로 할거야 :

    def prime(n):
        count = 0
        for i in range(1, (n+1)): 
             if n % i == 0: 
                 count += 1
        if count > 2:
            print "Not a prime"
        else:
            print "A prime"
    
  8. ==============================

    8.숫자가 복합 (소수가 아님)이라고 판단되면 작업이 완료됩니다. 반복을 사용하여 루프를 종료 할 수 있습니다.

    숫자가 복합 (소수가 아님)이라고 판단되면 작업이 완료됩니다. 반복을 사용하여 루프를 종료 할 수 있습니다.

    while num > a :
      if num%a==0 & a!=num:
        print('not prime')
        break          # not going to update a, going to quit instead
      else:
        print('prime')
        a=(num)+1
    

    또한 파이썬의 일부 구문에 더 익숙해 지도록 노력할 수도 있습니다. 루프가 한 줄짜리로 단축되어 여전히 제 의견으로는 잘 읽힐 수 있습니다.

    any(num % a == 0 for a in range(2, num))
    
  9. ==============================

    9.이것은 일을 할 것입니다 :

    이것은 일을 할 것입니다 :

    number=int(raw_input("Enter a number to see if its prime:"))
    if number <= 1:
        print "number is not prime"
    else:
        a=2
        check = True
        while a != number:
            if number%a == 0:
                print "Number is not prime"
                check = False
                break
            a+=1
        if check == True:
            print "Number is prime" 
    
  10. ==============================

    10.

    a=input("Enter number:")
    
    def isprime(): 
    
        total=0
        factors=(1,a)# The only factors of a number
        pfactors=range(1,a+1) #considering all possible factors
    
    
        if a==1 or a==0:# One and Zero are not prime numbers
            print "%d is NOT prime"%a
    
    
        elif a==2: # Two is the only even prime number
            print "%d is  prime"%a
    
    
        elif a%2==0:#Any even number is not prime except two
            print "%d is NOT prime"%a  
    
    
    
        else:#a number is prime if its multiples are 1 and itself 
             #The sum of the number that return zero moduli should be equal to the "only" factors
            for number in pfactors: 
                if (a%number)==0: 
                    total+=number
            if total!=sum(factors):
                print "%d is NOT prime"%a 
            else:
                 print "%d is  prime"%a
    isprime()
    
  11. ==============================

    11.이는 요인을 추적한다는 점에서 약간의 차이가 있습니다.

    이는 요인을 추적한다는 점에서 약간의 차이가 있습니다.

    def prime(a):
        list=[]
        x=2
        b=True
    
        while x<a:
            if a%x==0:
                b=False
                list.append(x)
            x+=1
    
        if b==False:
            print "Not Prime"
            print list
        else:
            print "Prime"
    
  12. ==============================

    12.

    max=int(input("Find primes upto what numbers?"))
    primeList=[]
    for x in range(2,max+1):
        isPrime=True
        for y in range(2,int(x**0.5)+1) :
            if x%y==0:
                isPrime=False
                break
    
        if isPrime:
            primeList.append(x)
    print(primeList)
    
  13. ==============================

    13.

    def is_prime(x):
        if x < 2:
            return False
        else:
            if x == 2:
                return True
            else:
                for i in range(2, x):
                    if x % i == 0:
                        return False
                return True
    x = int(raw_input("enter a prime number"))
    print is_prime(x)
    
  14. ==============================

    14.#는 소수입니다. 우리는 볼 것이다 (코더 : 치카 크)

    #는 소수입니다. 우리는 볼 것이다 (코더 : 치카 크)

    def is_prime (x) :     flag = False     x <2 인 경우 :         False를 반환합니다.     그밖에:         범위 (2, x)의 카운트 :             if x % count == 0 :                 flag = True                 단절         if flag == True :             False를 반환합니다.         True를 돌려 준다.

  15. from https://stackoverflow.com/questions/18833759/python-prime-number-checker by cc-by-sa and MIT license