Sử dụng hàm để xác định số nguyên tố

Các bác cho em hỏi là vì sao em nhập 9 mà nó vẫn hiển thị là số nguyên tố ạ ?
Có người nói là do return 1; Nhưng em nghĩ là khi thực hiện lệnh return 0 xong rồi thì chương trình sẽ out ra ngoài chương trình gọi nó thì sẽ không thực hiện return 1; nữa đúng không ạ ?

#include<stdio.h>
int primef(int N){
	if(N==2)	return 1;
	else{
		int i;
		for(i=2; i<=N/2; i++){
			if(N%i==0 || N==1){
				return 0;
			}
			else	return 1;
		}
	}
}
int main(){
	int N, i, P, k;
	printf("Input N: ");	scanf("%d", &N);
		if(primef(N)){
			printf("	N is a prime number\n");		
		}
		else{
			printf("	N is not a prime number\n");
		}

return 0;
}

Định dạng mã của bạn theo: http://daynhauhoc.com/t/112

Đúng là do return 1; đấy

2 Likes

Nhưng mà em tưởng là return 0; xong rồi nó thoát ra chương trình gọi hàm luôn chứ ạ

Bạn đặt sai vị trí thôi. Đáng lẽ phải đặt cuối hàm, đằng này lại đặt trong vòng lặp.
Tuy kết quả (sẽ) đúng nhưng chưa tối ưu.

1 Like

Em nhập 9 vào sai anh ạ, không đúng đâu :))

Ý anh là tn à ? Nhưng em vẫn chưa hiểu vì sao ?

{
	int i;
	for(i=2;i<=n/2;i++)
	{
		if(n%i!=0)
			continue;
		else
			return 1;
	}
	return 0;
}

Vì bạn chỉ vừa chia 9 cho 2 là đã vội kết luận :smiley: thật sự chỉ cần tới sqrt(n) thôi.

Nếu n = a * b thì a <= sqrt(n) <= b, vì nếu a, b nhỏ hơn thì a * b < n; lớn hơn thì a * b > n, vậy phải có một số không quá sqrt(n).

n = a * b * c cũng tương tự.

2 Likes

Ngược, làm ngược luôn rồi :rofl:

Cảm ơn ae, em hiểu rồi :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?