//x文字の#を空文字に置換すると、N % x文字残る。 //基本的にはN % x == 0となる最小のxを求めてあげれば良い。 //(ただし、##を消さないために、xは3以上にする必要がある。) //なお、約数の対称性より、Nが合成数ならばxの最小値もSQLT(N)以下になるのでxが大きくなったらNは素数である。 //このときはNを出力すればよい。 // //…なんて簡単な問題なわけがなくて、N = 2 * P(Pは3以上の素数)のときはPを出力しないといけないですね。 #include using namespace std; int main() { long long n; cin >> n; for( int x = 3; x <= 1000000; x++ ){ if( n % x == 0 ){ cout << x << endl; return 0; } } if( n % 2 == 0 && n >= 6 ) cout << n / 2 << endl; else cout << n << endl; return 0; }