

Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
#include <iostream>
#include <algorithm>
#include <sstream>
#define all(x) (x).begin(), (x).end()
using namespace std;
const int lim = 1e6;
int a, b;
bool np[lim + 5];
string to_string(int n) {
stringstream ss;
ss << n;
string s;
ss >> s;
return s;
}
bool palind(int n) {
string s = to_string(n);
string st = s;
reverse(all(st));
return s == st;
}
void sieve() {
for (int i = 2; i <= b; i++) {
if (!np[i]) {
if (i >= a) {
if (palind(i))
cout << i << ' ';
}
if (i * i > b) continue;
for (int j = i * i; j <= b; j += i)
np[j] = 1;
}
}
}
int main() {
cin >> a >> b;
sieve();
}
Hãy giúp mọi người biết câu trả lời này thế nào?

Bảng tin
293
2140
321
kiểu j vừa khởi tạo đã ngoài giới hạn r thì k cần chạy nx
2289
45102
1741
continue nó là không thực hiện lệnh dưới mà bạn, chứ còn khi mà i > b thì tự khắc nó dừng thôi :)
2289
45102
1741
bạn không chú ý đến câu lệnh continue rồi :)
293
2140
321
mình bt chứ
293
2140
321
chỉ là bỏ đi cho đỡ lằng nhằng thôi
293
2140
321
cuối cùng như sắp uýnh lộn r ấy sợ wá
1210
30619
1167
nhưng trong vòng for nó sẽ kiểm tra hộ luôn cái i * i > b đấy đúng là thế nhưng nếu i > 46000 thì j = i * i sẽ vượt quá kiểu int -> lỗi số và sẽ có khả năng bị exit code :)) có thể bạn sẽ nói là sao ko dùng kiểu long long :)) đơn giản là mình không thích :)) Rút gọnnhưng trong vòng for nó sẽ kiểm tra hộ luôn cái i * i > b đấy đúng là thế nhưng nếu i > 46000 thì j = i * i sẽ vượt quá kiểu int -> lỗi số và sẽ có khả năng bị exit code :)) có thể bạn sẽ nói là sao ko dùng kiểu long long :)) đơn giản là mình không thí... xem thêm
1210
30619
1167
chính xác hơn là i > sqrt(2^31) ~ 46341 :))