碎碎念
ABC144-C-01
Takahashi is standing on a multiplication table with infinitely many rows and columns.
The square (i,j) contains the integer i
j. Initially, Takahashi is standing at (1,1).
In one move, he can move from (i,j) to either (i+1,j) or (i,j+1).
Given an integer N, find the minimum number of moves needed to reach a square that contains N.
Input is given from Standard Input in the following format:
N
Print the minimum number of moves needed to reach a square that contains the integer N.
10
5
(2,5) can be reached in five moves. We cannot reach a square that contains 10 in less than five moves.
50
13
(5, 10) can be reached in 13 moves.
10000000019
10000000018
Both input and output may be enormous.
void coder_solution() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
long long n;
cin >> n;
for(long long i = sqrt(n); i > 0; --i) {
if(n % i == 0) {
cout << i - 1 + (n / i) - 1;
return;
}
}
}
#include <bits/stdc++.h>
using namespace std;
int main() {
long long N;
cin >> N;
long long res = N + 1 - 2; // (a, b) = (1, N)
for (long long a = 1; a * a <= N; ++a) {
if (N % a == 0) res = min(res, a + N/a - 2);
}
cout << res << endl;
}