소수구하기 c 프로그램을 python으로 고치는 중입니다..

소수구하기 c 프로그램을 python으로 고치는 중입니다..
먼저 구하고자 하는 c 프로그램은 :

#include <stdio.h>

void main() 
{
    int i, j, count = 1;
    long sum = 0;

    printf("1~1000 사이의 수 중에서 소수를 구하는 프로그램 \n");

    printf("%d\t", 1);

    for (i = 1; i <= 1000; i++) {
        for (j = 2; j < i; j++) {
            if ((i % j) == 0)
                break;
        }

        if (i == j) {
            printf("%d\t", i);
            count++;

            if ((count % 8) == 0)
                printf("\n");
        }
    }
    printf("\n1부터 1000 사이의 소수는 %d개이다. \n", count);
}//여기에 코드를 입력하세요

지금 작성한 python프로그램은:

#!/usr/bin/python

count=1
number = input("what is number:")
for i in range(1,number+1):
        for j in range (2,i):
                if i%j == 0
                        break;
                elif i==j:
                        count +=1
                        print i
                        if count%8 == 0
                                print(1\n )
#python prime.py
what is number:1000
[root@horyundangIII yoon~]# 
[root@horyundangIII yoon~]# 

답이 안나옴 ^^;; 어떻게 해야 할지?

1답변

  • 답만 원하시는 거라면... 혹시 에라토스테네스의 체라고 들어 보셨나요?

    # 위에 링크붙인 위키백과 문서에서 그대로 퍼와 주석만 달았습니다.
    # 수학자들이 코딩을 하면 느낌이 이렇게 다르네요.
    def prime_list(n):
        # 일단 모든 숫자를 소수라고 가정합니다.
        sieve = [True] * n
        # n의 최대 약수가 될 수 있는 자연수를 구한 뒤
        m = int(n ** 0.5)
        # 2, 3, ..., 그 자연수까지를 기준으로
        for i in range(2, m+1):
            # 소수라고 가정한 모든 수를 검사해 봅니다.
            if sieve[i] == True:
                # 예컨대 지금 기준삼은 자연수가 6이라면 6, 12, 18, ..., n까지의 모든 수를
                for j in range(i+i, n, i):
                    # 소수가 아니라고 번복합니다.
                    sieve[j] = False
        # 그래도 아직 소수라고 간주되고 있는 숫자들이 있다면 돌려줍니다.
        return [i for i in range(2, n) if sieve[i] == True]
    
    prime_list(20)
    # [2, 3, 5, 7, 11, 13, 17, 19]
    

    제 생각에 이 과제는 파이썬 과제라기보다는 이미 주어져 있는 (수학적) 원리를 가장 효율적으로 구현하는 감각에 대한 과제입니다. 소수를 구하는 수학적 원리를 우선 더 깊이 탐구해 보시면 좋을 듯합니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.