という問題に対し、以下のようなコードを作成しました。複数のデータセットが与えられます。
各データセットに n (3 ≤ n ≤ 50,000) が1行に与えられます。
データセットの数は 50 を超えません。
各データセットに対して、n より小さい素数のうち最大のものと、n より大きい素数のうち最小のものを1つのスペースで区切って1行に出力して下さい。
#include <iostream>
using namespace std;
int main() {
int n;
while (cin >> n) {
int max_num = 0;
int new_num = 0;
int sn = n;
int bn = n;
while (1) {
sn--;
bn++;
if (max_num == 0) {
if (sn <= 3) {
if (sn == 2 || sn == 3) max_num = sn;
continue;
}
else {
if (sn % 2 == 0 || sn % 3 == 0) continue;
if (sn % 6 != 1 && sn % 6 != 5) continue;
bool check = true;
for (int j = 5; j * j <= sn; j += 6) {
if (sn % j == 0) check = false;
if (sn % (j + 2) == 0) check = false;
if (check == false) break;
}
if (check == true) max_num = sn;
}
}
if (new_num == 0) {
if (bn <= 3) {
if (bn == 2 || bn == 3) new_num = bn;
continue;
}
else {
if (bn % 2 == 0 || bn % 3 == 0) continue;
if (bn % 6 != 1 && bn % 6 != 5) continue;
bool check = true;
for (int j = 5; j * j <= bn; j += 6) {
if (bn % j == 0) check = false;
if (bn % (j + 2) == 0) check = false;
if (check == false) break;
}
if (check == true) new_num = bn;
}
}
if (max_num != 0 && new_num != 0) break;
}
cout << max_num << " " << new_num << endl;
}
return 0;
}
しかし、自動審判で誤答と判定されたため適当な数字を入力してみると 7 の場合に出力が 3 と 11 となっていることに気づきました。
自分のケアレスミスか何かだとは思うのですが、自分では間違っている箇所に気づくことが出来なかったので指摘していただきたいです。