01/10/2018, 17:42

Code kiểm tra số nguyên tố bị sai kết quả

#include <iostream>
#include<math.h>
using namespace std;
//so nguyen to prime
bool prime(int n);
bool prime(int n){
	if (n<2)
		return false;	
	else if(n>2)
	{
		if (n%2==0)
		{
			return false;	//khong la so nguyen to
		}
		
		
		
		
		int i=2;
		while(i<=sqrt((float)n))
		{
			if(n%i==0)
				return false;	//khong la so nguyen to
			else 
			{
				return true;	//la so nguyen to
			}
		i+=1;
		}
	
	}
	else 
		return true;
}
int main(){
	int n;
	cout<<"enter n: ";
	cin>>n;
	prime(n);
if (prime(n)== true)
cout<<"n is prime";
if (prime(n)== false)
cout<<"n is not a prime";
	
return 0;
}

mình có đoạn code xem n có phải là số nguyên tố. mình nhập 2 thì là số nguyên tố đúng nhưng nhập 3 thì lại ko phải là số nguyên tố. nhập 9 thì lại là số nguyên tố. không hiểu mình sai ở đâu ạ

Nguyễn Nam viết 19:51 ngày 01/10/2018
while(i<=sqrt((float)n)) { 
    if(n%i==0) return false; //khong la so nguyen to 
    else { return true; // bỏ khối lệnh else này và thử lại xem
    } i+=1; 
}

n%i != 0 không có nghĩa là số nguyên tố

rogp10 viết 19:47 ngày 01/10/2018
  1. Hàm trả về giá trị rác vì vòng while không chạy
  2. return true quá sớm: hợp số có thể kick sớm, nhưng phải thử hết từ 2 đến sqrt(n) mới khẳng định là snt được.
Bài liên quan
0