01/10/2018, 17:39

Code in số nguyên tố không in ra giá trị nào

#include <iostream>
#include<math.h>
using namespace std;
//so nguyen to prime
int prime(int n){
	int a=0,b=0,i=0;
	while(i<sqrt(n)){
		if(n%i==0){
		a=1;//khong la so nguyen to
		}
		else {b=1;}//la so nguyen to
	i++;}
	if ((a==1)&&(b==0))
	cout<<"n is not a prime";
	if((a==1)&&(b==1))
	cout<<"n is not a prime";
	if((a==0)&&(b==1))
	cout<<"n is a prime";
}

int main(){
	int n;
	cout<<"enter n: ";
	cin>>n;
	prime(n);
return 0;
}

em làm như thế này để xem n có phải là số nguyên tố không , không hiểu em làm sai ở đâu mà nó chạy vẫn dc nhưng khi nhập n xong thì nó không trả về giá trị nào

Hieu Nguyen Van viết 19:49 ngày 01/10/2018
  1. Việc đầu tiên cần làm của hàm kt số nguyên tố là kiểm tra nếu số đó < 2 thì return false
  2. Cần kiểm tra tới <= sqrt(n), thử số 9 thì biết.

Bạn tham khảo code này nhé

if(n < 2){
        cout << n << " khong phai so nguyen to\n";
        return 0;
    }
    int count = 0;
    for(int i = 2; i <= sqrt(n); i++){
        if(n % i == 0){
            count++;
        }
    }
    if(count == 0){
        cout << n << " la so nguyen to\n";
    }else{
        cout << n << " khong phai so nguyen to\n";
    }
NBQ viết 19:41 ngày 01/10/2018
int prime(int n) { 
    int a=0,b=0,i=0; 
    while (i < sqrt(n)) { 
        if (n%i==0) {

Code của bạn gặp phải lỗi chia cho 0 nên chương trình bị crash ngay lập tức từ vòng lặp đầu tiên khi i = 0.
Trong hàm prime() bạn có thể thực hiện các bước sau:

  • Không cần dùng tới 2 biến a và b để kiểm tra kết quả mà chỉ cần 1 biến thôi.
  • Kiểm tra n < 2 thì không phải là số nguyên tố, n = 2 hoặc n = 3 thì trả về kết quả n là số nguyên tố luôn.
  • Khởi tạo i = 2 luôn và cho chạy vòng lặp i = 2 -> i <= sqrt(n) để kiểm tra, nếu n % i == 0 thì trả về kết quả n không phải là số nguyên tố luôn. Ngược lại thì n là số nguyên tố.
Bài liên quan
0