module main; // https://yukicoder.me/problems/no/312/editorial より // 素因数分解 import std; // https://qiita.com/LorseKudos/items/9eb560494862c8b4eb56 より // 整数nの約数を列挙する long[] divisors(long n) { long[] lowerDivisors, upperDivisors; long i = 1; for (; i * i <= n; i++) { if (n % i != 0) continue; lowerDivisors ~= i; if (i != n / i) upperDivisors ~= n / i; } return lowerDivisors ~ upperDivisors.reverse; } void main() { // 入力 long N = readln.chomp.to!long; // 答えの計算 auto div = divisors(N); // 答えの出力 foreach (d; div) { // 2 より大きい最小の約数が答え if (d > 2) { writeln(d); return; } } }