Lỗi hàm đếm số lượng số nguyên tố dùng đệ quy

hàm đếm số lượng số nguyên tố dùng đệ quy. mọi người sửa lỗi giúp minh vs.

int demnt1(int a[], int n)
{
    if (n <= 0)
        return 0;

    for (int h = 2; h < a[n - 1]; h++)
        if (a[n - 1] % h == 0) // số cuối k là số nguyên tố
            return demnt1(a, n - 1);
        else
            return demnt1(a, n - 1) + a[n - 1];
}

Lỗi chỗ nào vậy Minh Sang?

Lưu ý là Minh Sang không nên đặt tên hàm và tên biến khó hiểu như thế nhé. Nên sửa cách trình bày thành

int demnguyento(int arr[], int n)
{
    if (n <= 0)
        return 0;

    for (int i = 2; i < arr[n - 1]; i++) {
        // số cuối k là số nguyên tố
        if ((arr[n - 1] % i) == 0) {
            return demnguyento(arr, n - 1);
        } else {
            return demnguyento(arr, n - 1) + a[n - 1];
        }
    }
}

Forum mình cũng có nhiều bài nguyên tố rồi, Minh sang xem thử xem

1 Like

Không biết đúng không, code thử trên sublime chưa test hàm :joy:
Hàm kiểm tra tự viết thử xem.

int count(int a[], int n) {
	if(n<1){
		return 0;
	}
	else{
		return isPrime(a[n-1]) ? count(a, n-1) + 1 : count(a, n-1);
	}
}

em sẽ sẽ gắng sửa cách trình bày.
em cám ơn anh nhiều!

1 Like

em mới học năm nhất. nên tên hàm của anh viết em không hiểu và mấy từ tiếng anh chắc có lẽ là chuyên ngành em cũng không hiểu. nhưng em sẽ cố gắng.
em cám ơn anh nhiều vì đã giúp em.

1 Like

count nghĩa là đếm thôi, prime number là số nguyên tố. :smile: em chuyên ngành gì mà k biết thế?

anh ơi sao em cho code anh chạy ra kết quả sai y như code của em viết vậy anh.

isPrime có cùng khai báo hay hay gì không anh. sao em chạy nó báo lỗi

Anh ghi rõ ràng là anh chỉ sửa lỗi trình bày thôi mà. Còn số nguyên tố em tìm kiếm trong forum đi, nhiều bài lắm rồi.

Vì anh @ltd chỉ thay đổi tên hàm và biến cho dễ nhìn thôi mà.

đây là hàm kiểm tra một số có phải là số nguyên tố hay không, quá cơ bản nên em tự tìm hiểu nhé.

1 Like

hàm tìm và đếm số nguyên tố xài vòng lặp em viết đươc. còn viết hàm tìm và đếm số nguyên tố xài “đệ quy” thì em không viết được.

int demnt2( int a[], int n)
{
	int dem = 0; int nto;
	if (n <= 0)return 0;
	for (int i = 0; i < n; i++)
	{
		//kiểm tra xem a[i] có phải số ngtố hay không
		nto = (a[i] < 2) ? 0 : 1;
		for (int j = 2; j < a[i]; j++)
		if (a[i] % j == 0)	//chia hết
		{
			nto = 0;
			break;
		}
		if (nto == 1)		//a[i] là số ngtố
			dem++;
	}
	return dem;
}

không ngờ là sáng code cũng đúng =)) mấy tuần nay code java nay quay lại C++ code nhìn lạ lạ :joy: còn kiểu nữa mà xem chắc k hiểu nên cho đoạn này tham khảo chơi

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