<1> 5086번 배수와 약수
문제
4 × 3 = 12이다.
이 식을 통해 다음과 같은 사실을 알 수 있다.
3은 12의 약수이고, 12는 3의 배수이다.
4도 12의 약수이고, 12는 4의 배수이다.
두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.
- 첫 번째 숫자가 두 번째 숫자의 약수이다.
- 첫 번째 숫자가 두 번째 숫자의 배수이다.
- 첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니다.
입력
입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 10,000이 넘지않는 두 자연수로 이루어져 있다. 마지막 줄에는 0이 2개 주어진다. 두 수가 같은 경우는 없다.
출력
각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.
예제 입력 1
8 16
32 4
17 5
0 0
예제 출력 1
factor
multiple
neither
#define _CRT_SECUER_NO_WARNINGS
#include <stdio.h>
int main() {
int a, b;
while (1)
{
scanf("%d %d", &a, &b);
if ((a != 0) && (b != 0)) {
if (b % a == 0) {
printf("factor\n");
continue;
}
else if (a % b == 0) {
printf("multiple\n");
continue;
}
else {
printf("neither\n");
continue;
}
}
else if ((a == 0) && (b == 0)) break; }
return 0; }
<2> 2501번 약수 구하기
문제
어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다.
6을 예로 들면
- 6 ÷ 1 = 6 … 0
- 6 ÷ 2 = 3 … 0
- 6 ÷ 3 = 2 … 0
- 6 ÷ 4 = 1 … 2
- 6 ÷ 5 = 1 … 1
- 6 ÷ 6 = 1 … 0
그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다.
두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.
출력
첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.
예제 입력 1
6 3
예제 출력 1
3
#define _CRT_SECUER_NO_WARNINGS
#include <stdio.h>
int main() {
int n, k, i;
int count = 0;
scanf("%d %d", &n, &k);
//n의 약수 찾기
for (i = 1; i <= n+1; i++) {
<< 이 문장이 오래걸림// 입력(25 3) 일때 출력이 안나왔는데 i의 범위를 n+1까지 했을 때 출력이 3으로 잘 나왔다.
if (count == k) {
printf("%d\n", i-1);
break;
} << 다음 if 문과 이 if 문의 순서도 헷갈림 count 하기 전에 count == k 일때 break를 먼저 하는게 맞음 !!
if (n % i == 0) {
count++; }
}
if (count < k) printf("0");
return 0;
}
<3> 9506번 약수들의 합 **
문제
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.
예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.
n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
입력
입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)
입력의 마지막엔 -1이 주어진다.
출력
테스트케이스 마다 한줄에 하나씩 출력해야 한다.
n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).
이때, 약수들은 오름차순으로 나열해야 한다.
n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.
예제 입력 1
6 = 1 + 2 + 3
12 is NOT perfect.
28 = 1 + 2 + 4 + 7 + 14
예제 출력 1
6 12 28 -1
#define _CRT_SECUER_NO_WARNINGS
#include <stdio.h>
int main() {
int n, i;
while (1)
{
scanf("%d", &n);
if (n != -1) {
int sum = 0;
for (i = 1; i < n; i++) {
if (n % i == 0) sum += i;
}
if (n == sum) {
printf("%d = 1", n);
for (i = 2; i < n; i++) {
if (n % i == 0) printf(" + %d", i);
}
printf("\n");
}
else if (n != sum) printf("%d is NOT perfect.\n", n);
}
else if (n == -1) break;
}
return 0;
}
<4> 1978번 소수 찾기
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력 1
4
1 3 5 7
예제 출력 1
3
#define _CRT_SECUER_NO_WARNINGS
#include <stdio.h>
int main() {
int n, k, m;
scanf("%d", &n);
int count = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &k);
int d = 0;
for (m = 1; m <= k; m++) {
if (k % m == 0) {
d++;
}
}
if (d == 2) count++;
}
printf("%d", count);
return 0;
}
<5> 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
60
100
예제 출력 1
620
61
#define _CRT_SECUER_NO_WARNINGS
#include <stdio.h>
int main() {
int n, m;
int i, k;
scanf("%d", &m);
scanf("%d", &n);
int sum = 0; >> 위치 중요 (sum++이 되는 for문 바로 위에 sum=0을 해야함)
for (i = m; i <= n; i++) {
int count = 0;
for (k = 1; k <= i; k++) {
if (i % k == 0) {
count++;
}
}
if (count == 2) {
sum += i;
}
}
if (sum == 0) printf("-1");
else printf("%d\n", sum);
for (i = m; i <= n; i++) {
int count = 0;
for (k = 1; k <= i; k++) {
if (i % k == 0) {
count++;
}
}
if (count == 2) {
printf("%d", i);
break;
}
}
return 0;
}
<6> 11653번 소인수분해
문제
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
출력
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
예제 입력 1
72
예제 출력 1
2
2
2
3
3
#define _CRT_SECUER_NO_WARNINGS
#include <stdio.h>
int main() {
long int n;
int i = 2;
scanf("%ld", &n);
while (1) {
if (n == 1) break;
else {
if (n % i == 0) {
n = (n / i);
printf("%d\n", i);
}
else i++;
}
}
return 0;
}
'AI HW study > Baekjoon' 카테고리의 다른 글
백준 8단계: 일반 수학 1 (0) | 2023.07.20 |
---|---|
백준 6단계 : 심화 1 (0) | 2023.07.19 |
백준 5단계 문자열 (0) | 2023.07.15 |
백준 5단계 문자열 개념 정리 (0) | 2023.07.15 |
백준 4단계: 1차원 배열 (0) | 2023.07.14 |