明らかに 以下で最も大きい素数を選ぶことが最適です。
ある数 が素数かどうかを判定するには、平方根まで順に割って確かめることにより で判定することができます。
素数定理より、 から順に素数の判定を行うことで で 以下で最も大きい素数を求めることができ十分に高速です。
#include<bits/stdc++.h>
using namespace std;
template <typename T>
bool isPrime(T n){
switch(n){
case 0: // fall-through
case 1: return false;
case 2: return true;
}
if(n % 2 == 0) return false;
for(T i = 3; i * i <= n; i += 2){
if(n % i == 0){
return false;
}
}
return true;
}
int main(){
int h, a; cin >> h >> a;
int ans = 0;
for(int i = a; i >= 2; i--){
if(isPrime(i)){
ans = (h + i - 1) / i;
break;
}
}
cout << ans << "\n";
}