ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • section2.7 소수(에라토스테네스 체)
    알고리즘 2022. 10. 24. 23:26

    자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요. 만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다. 제한시간은 1초입니다.

     

     

     

    import sys
    sys.stdin = open("input.txt", "rt")
    n = int(input())
    
    for x in range(3, n+1):
        for y in range(2, x):
            if x%y == 0:
                break

     

     

    소수 > 다른 숫자로 나눴을 때 무조건 나머지가 남음

    이 점을 이용해서 for 문에서 나머지가 없으면 그 순간 break이고 break가 한 번도 안 걸린 경우 소수로 생각했다

    문제는 9와 같이 2에서는 나머지가 안 남지만 3에서 break가 되는 경우였다

    for ~ else 구문을 사용했으면 내가 생각한대로 구현할 수 있었을 것 같다

     

    아니면 input값을 받고 리스트를 만든 다음에 소수가 아니면 pop 하는 방법도 가능할 것 같다

     

     

    import sys
    sys.stdin = open("input.txt", "rt")
    n = int(input())
    ch = [0]*(n+1)
    cnt = 0
    
    for i in range(2, n+1):
        if ch[i] == 0:
            cnt += 1
            for j in range(i, n+1, i):
                ch[j] = 1
    print(cnt)

     

    정답은 이런식으로 ch 리스트를 만든 후 채워나가는 것이었는데 신박하다 

     

     

     

    for - else문 정리

    for i in range(5):
    	if i == 2:
        	break
        print(i, end=' ')
    else:
    	print("for문 끝")

    출력값 : 0 1 

    for문이 break 등으로 중간에 빠져나오지 않고 끝까지 실행됐을 경우 else문이 실행되는 방식

     

     

    import sys
    sys.stdin = open("input.txt", "rt")
    n = int(input())
    cnt = 0
    
    for x in range(3, n+1):
        for y in range(2, x):
            if x%y == 0:
                break
        else: 
            print(x, y, x%y)
            cnt += 1
    print(cnt+1)

    for-else문을 활용해서 다시 답을 만들었다

    이중 for문에서 2를 어떻게 할 수가 없어서 어차피 항상 소수이니까 마지막 cnt에 1을 더해줬다.

    728x90

    '알고리즘' 카테고리의 다른 글

    section2.9 주사위 게임  (0) 2022.10.25
    section2.8 뒤집은 소수  (0) 2022.10.24
    section2.6 자릿수의 합  (0) 2022.10.22
    section2.5 정다면체  (0) 2022.10.22
    section2.4 대표값  (0) 2022.10.22
Designed by Tistory.