[백준 8658] Liczba (C#, C++) - soo:bak
작성일 :
문제 링크
설명
정수 n이 주어질 때, 1부터 n 사이에서 n의 약수가 아닌 가장 작은 수와 가장 큰 수를 출력하는 문제입니다.
1과 n은 항상 약수이므로 답은 2부터 n-1 사이에서 찾습니다.
접근법
먼저, 최소 비약수를 찾습니다. 2부터 시작해서 n으로 나누어떨어지지 않는 첫 번째 수를 찾습니다.
다음으로, 최대 비약수를 찾습니다. n-1부터 시작해서 n으로 나누어떨어지지 않는 첫 번째 수를 찾습니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
namespace Solution {
class Program {
static void Main(string[] args) {
var n = long.Parse(Console.ReadLine()!);
var minNon = 2L;
while (n % minNon == 0)
minNon++;
var maxNon = n - 1;
while (n % maxNon == 0)
maxNon--;
Console.WriteLine($"{minNon} {maxNon}");
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n; cin >> n;
ll minNon = 2;
while (n % minNon == 0)
minNon++;
ll maxNon = n - 1;
while (n % maxNon == 0)
maxNon--;
cout << minNon << " " << maxNon << "\n";
return 0;
}