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
|
N = 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
|
M = int(input())
N = 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
|
N = 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/i #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(2, int(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%)
'PS > BOJ' 카테고리의 다른 글
(백준, 파이썬) 베르뜨랑 공혁준 (0) | 2022.06.10 |
---|---|
(백준, 파이썬) 피보나치 (0) | 2022.06.09 |
(백준, 파이썬) 10872 - 팩토리얼 (0) | 2022.06.07 |
(백준, 파이썬) 설탕 배달 + 큰 수 A + B (0) | 2022.06.06 |
(백준, 파이썬) 부녀회장님의 다이나믹 설탕 배달 (0) | 2022.06.05 |