일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |
31 |
- c++
- C/C++
- 코딩 테스트
- 코딩 기초 트레이닝
- 게임 엔진 공부
- 2024년
- 3월
- 2023년
- todolist
- 유니티 심화과정
- 단계별로 풀어보기
- 1월
- 개인 프로젝트
- 5월
- 백준
- 수학
- 골드메탈
- 자료 구조
- 프로그래머스
- 다이나믹 프로그래밍
- 유니티
- 기초
- 2022년
- 2025년
- 2월
- 7월
- 6월
- 4월
- 개인 프로젝트 - 런앤건
- 입문
- Today
- Total
기록 보관소
[Baekjoon/백준]단계별로 풀어보기 9단계: 기본 수학 2-1번~3번(C/C++) 본문
백준 단계별로 풀어보기 9단계: 기본 수학 2
https://www.acmicpc.net/step/10
기본 수학 2 단계
2부터 X-1까지 모두 나눠서 X가 소수인지 판별하는 문제 1
www.acmicpc.net
(1) 백준 1978번: 소수 찾기
https://www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
- 문제 설명
-주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
- 입력과 출력
-입력: 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
-출력: 주어진 수들 중 소수의 개수를 출력한다.
- 코드
#include <stdio.h>
int main() {
int N, M, count = 0, isPrime;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf(" %d", &M);
isPrime = 0;
if (M == 1)
continue;
for (int j = 2; j < M; j++)
if (M % j == 0)
isPrime = 1;
if (isPrime == 0)
count++;
}
printf("%d\n", count);
return 0;
}
- 결과
(2) 백준 2581번: 소수
https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
- 문제 설명
-자연수 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을 출력한다.
- 코드
-최초 작성 코드(시간 초과로 실패..)
#include <stdio.h>
int main() {
int M, N, temp, isPrime, sum = 0, min = 0, count = 0;
scanf("%d", &M);
scanf("%d", &N);
temp = M;
while (!(temp > N)) {
if (temp == 1)
continue;
isPrime = 0;
for (int i = 2; i < temp; i++)
if (temp % i == 0)
isPrime = 1;
if (isPrime == 0) {
if (count == 0)
min = temp;
sum += temp;
count++;
}
temp++;
}
if (count == 0)
printf("-1\n");
else
printf("%d\n%d\n", sum, min);
return 0;
}
-완성 코드
#include <stdio.h>
int main() {
int M, N, temp, isPrime, sum = 0, min = 0;
scanf("%d", &M);
scanf("%d", &N);
for (temp = M; temp <= N; temp++) {
if (temp == 1)
continue;
isPrime = 0;
for (int i = 2; i < temp; i++)
if (temp % i == 0)
isPrime = 1;
if (isPrime == 0) {
if (sum == 0)
min = temp;
sum += temp;
}
}
if (sum == 0)
printf("-1\n");
else
printf("%d\n%d\n", sum, min);
return 0;
}
- 결과
(3) 백준 11653번: 소인수분해
https://www.acmicpc.net/problem/11653
11653번: 소인수분해
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
www.acmicpc.net
- 문제 설명
-정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
- 입력과 출력
-입력: 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
-출력: N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
- 코드
#include <stdio.h>
int main() {
int N;
scanf("%d", &N);
if (N != 1){
for (int i = 2; i <= N; i++)
while (N % i == 0) {
printf("%d\n", i);
N /= i;
}
}
return 0;
}
- 결과
'코딩 테스트 > 백준' 카테고리의 다른 글
[Baekjoon/백준] 4948번: 베르트랑 공준(C/C++) (0) | 2022.01.21 |
---|---|
[Baekjoon/백준] 1929번: 소수 구하기(C/C++) (0) | 2022.01.20 |
[BaekJoon/백준] 1011번: Fly me to the Alpha Centauri(C/C++) (0) | 2022.01.18 |
[Baekjoon/백준]단계별로 풀어보기 8단계: 기본 수학 1-1번~8번(C/C++) (0) | 2022.01.17 |
[Baekjoon/백준]단계별로 풀어보기 7단계: 문자열(C/C++) (0) | 2022.01.16 |