쑈쓔


1978 - 소수찾기

(https://www.acmicpc.net/problem/1978)

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.


-맞힌 코드-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
= int(input())    #개수
lst = list((input().split()))   #숫자 받기
lst_sosu = []   #소수 찾아서 넣기
 
for i in range(len(lst)):
    lst[i] = int(lst[i])    #lst를 int화
 
def sosu(x):
    if x == 1:
        return 0
    
    for i in range(2, x):
        if x%i == 0:
            return 0
        
    else:
        return 1    #소수 판별 정의
 
for i in lst:
    if sosu(i) == 1:
        lst_sosu.append(i)  #소수만 append
        
print(len(lst_sosu))    #갯수 출력
 
cs


2581 - 소수
(https://www.acmicpc.net/problem/2581)

문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

출력

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.


-맞힌 코드-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
= int(input())
= int(input())    #M, N 받기
lst = list(range(M, N+1))   #M ~ N 범위의 숫자로 이루어진 리스트
lst_sosu = []   #소수 찾아서 넣기
 
def sosu(x):
    if x == 1:
        return 0
    
    for i in range(2, x):
        if x%i == 0:
            return 0
        
    else:
        return 1    #소수 판별 정의
 
for i in lst:
    if sosu(i) == 1:
        lst_sosu.append(i)  #소수만 append
 
if len(lst_sosu) >= 1:
    print(sum(lst_sosu))
    print(min(lst_sosu))    #최솟값, 합 출력
else:
    print('-1'#소수 없으면 -1 출력
 
cs

쓴 거 다시 쓰기



11653 - 소인수분해

(https://www.acmicpc.net/problem/11653)

문제

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

출력

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.


-맞힌 코드-

1
2
3
4
5
6
7
8
9
10
11
= int(input())    #N을 입력받는다.
 
if N == 1:  
    print('')   #N이 1이라면 공백을 출력한다.
else:
    for i in range(2, N+1):
        while N%i == 0:
            print(i)
            N = N/#2부터 N까지, 나눠 떨어지는 수가 있다면 나눠 떨어지지 않을때까지 그 수를 출력하고, 나눈다.
 
#뭐야 이거 채점이 왜 이렇게 느려
cs

의외로 간단은 했는데..

너 왜 이렇게 느려..?


1929 - 소수 구하기

(https://www.acmicpc.net/problem/1929)

문제

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

출력

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.


-맞힌 코드-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
M, N = map(int, input().split())
lst = list(range(M, N+1))   #M ~ N 범위의 숫자로 이루어진 리스트
lst_sosu = []   #소수 찾아서 넣기
 
def sosu(x):
    if x == 1:
        return 0
        
    else:
        for i in range(2int(x**0.5)+1):
            if x%i == 0:
                return 0
        
        return 1    #소수 판별 정의
 
for i in lst:
    if sosu(i) == 1:
        lst_sosu.append(i)  #소수만 append
 
for i in lst_sosu:
    print(i)
 
cs

너무 느려질까봐 잠깐 검색해서 참고했다.

굳이 2~x까지 재볼 필요 없이 x의 제곱근까지만 해줘도 충분하다고 한다.

 

영~차

 

8번 테마의 4번째까지 총 66개 풀었어.

앞으로 319개의 문제가 남았어. (17.1%)

 

복사했습니다!