1부터 n까지 다 보면서
if (temp_a < a && temp_b >= 0)
이렇게 찾지 않고
애초에 for문에서 temp_a < a && temp_b >= 0 인 경우만 보면 됩니다.
temp_a < a 는 어차피 당연한거고 (* a가 1000000보다 클 수도 있어요)
temp_b >=0 은 j가 k보다 크거나 같은 경우를 뜻합니다.
j ≥ k => j ≥ n/j => j*j ≥ n => j ≥ 루트n
그러므로
for (int j=sqrt(n); j<=n; j++)
이러면 temp_a < a && temp_b >= 0 인 범위만 찾는 거예요