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 ạ

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

2 Likes
  1. Hàm trả về giá trị rác vì vòng while không chạy :slight_smile:
  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.
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?