[ 백준 ] 2986 / 파스칼

金弘均·2021년 9월 15일
0

Baekjoon Online Judge

목록 보기
68/228
post-thumbnail

# Appreciation

/*
 * Problem :: 2986 / 파스칼
 *
 * Kind :: Math
 *
 * Insight
 * - 코드를 잘 보니...
 *   counter = N 으로부터 max(N의 진약수) 까지의 거리
 *   + N = max(N의 진약수) * min(N의 소인수)
 *       = counter * min(N의 소인수)
 *     # 빨리 구하려면 sqrt(N) 을 해줘서 찾으면 될듯하다
 *       더 빨리 찾고 싶으면 소수를 구한다음에 확인해보면 될것 같다
 *       -> O(N)=10^9 라서
 *          O(sqrt(N))=10^(4.5)~31622 정도라
 *          소수를 구하지 않고 for 문을 돌려도 괜찮을 것 같다
 */

# Code

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source

#include <iostream>

using namespace std;

#define endl '\n'

// Set up : Global Variables
/* None */

// Set up : Functions Declaration
/* None */


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Set up : Input
    int N; cin >> N;

    // Process
    int counter = N-1; /* 소수일 때, i=1 인 경우 */
    for (int i=2; i*i<=N; i++) { /* i=2~sqrt(N) */
        if (N%i == 0) {
            /* i = min(N의 소인수) */
            /* N/i = max(N의 진약수) */
            /* counter = N 으로부터 max(N의 진약수) 까지의 거리
             *         = N-N/i */
            counter = N-N/i;
            break;
        }
    }

    // Control : Output
    cout << counter << endl;
}

// Helper Functions
/* None */
profile
이런 미친 게임을 봤나! - 옥냥이

0개의 댓글