/*
* 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 문을 돌려도 괜찮을 것 같다
*/
//
// 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 */