bool isPrime(int n){
if (n<2){
return false;
}else{
for(int i = 2;i<=sqrt(n);i++){
if(n%i == 0){
return false;
}
}
return true;
}
}
int main(){
queue<int> q;
int n;
cin >> n;
for (int i = 2; i <= n, i < 10; i++){
if (isPrime(i)){
q.push(i);
}
}
while (!q.empty()){
for (int i = 1; i <= 9; i++){
int k = q.front()*10 + i;
if ( k <= n && isPrime(k)){
q.push(q.front()*10 + i);
}
}
cout << q.front() << " ";
q.pop();
}
return 0;
}
Tại sao khi mình thay đổi (i<10 và i<=n) lên trước và sau thì có sự thay đổi ở dùng for đầu tiên hàm main
- (i<=n,i<10) thì code sẽ sai với trường hợp n=4,6
- (i<10,i<=n) thì code sẽ đúng với mọi trường hợp
Dưới đây là code có thể ngắn hơn tại sao lại ko được sử dụng
bool tim_so_nguyen_to(int n){
if (n<2){
return false;
}else{
for(int i = 2;i<=sqrt(n);i++){
if(n%i == 0){
return false;
}
}
return true;
}
}
int main(){
int n;
cin >> n;
queue<int> q;
for( int i = 2;i<n;i++){
if(tim_so_nguyen_to(i)){
q.push(i);
}
}
while(!q.empty()){
cout << q.front()<< " ";
q.pop();
}
return 0;
}
P/s : cảm ơn các bạn giúp đỡ nhé !!!