Chương trình đếm số lượng chữ số nguyên tố của n nguyên dương nhập từ bàn phím

#include<iostream>
#include<math.h>
using namespace std;
unsigned char demNT(unsigned long n)
{
	unsigned char dem = 0;
	while (n>0)
	{
		unsigned char temp=n%10;
		n/=10;
		if(temp==2)
			dem=dem+1;
		if(temp==3)
			dem=dem+1;
		if(temp==5)
			dem=dem+1;
		if(temp==7)
			dem=dem+1;
	}
	return dem;
}
int main()
{
	unsigned long n;
	cout<<"Nhap so nguyen duong n:";
	cin>>n;
	cout<<demNT(n);
}

Screenshot 2023-09-04 173330
Code này mình tìm số lượng chữ số nguyên tố của số n nhập từ bàn phím, nhưng khi mình chạy kết quả không như mong muốn(như hình). Mọi người có cách khắc phục không ạ

Vì hàm trả về 1 unsigned char nên sẽ in ra ký tự ứng với mã char thay vì số.

2 Likes

Mã của bạn đang không hoạt động đúng cách vì bạn đang kiểm tra các chữ số của số nhập vào nếu chúng là 2, 3, 5, hoặc 7. Tuy nhiên, chương trình của bạn chỉ đếm các chữ số này một lần duy nhất, mà không quan tâm đến mức độ lặp lại của chúng. Điều này có nghĩa là nếu bạn có nhiều lần xuất hiện của các chữ số này, chương trình sẽ đếm chúng là 1, thay vì số lần xuất hiện thực sự.

Để sửa lỗi này, bạn nên đếm số lần xuất hiện của các chữ số nguyên tố mỗi khi chúng xuất hiện trong số n. Bạn thử cách dưới đây xem nhé:

#include <iostream>
#include <cmath>
using namespace std;

bool isPrime(int num) {
    if (num <= 1) return false;
    if (num <= 3) return true;
    if (num % 2 == 0 || num % 3 == 0) return false;
    for (int i = 5; i * i <= num; i += 6) {
        if (num % i == 0 || num % (i + 2) == 0) return false;
    }
    return true;
}

unsigned char demNT(unsigned long n) {
    unsigned char dem = 0;
    while (n > 0) {
        unsigned char temp = n % 10;
        n /= 10;
        if (isPrime(temp)) {
            dem++;
        }
    }
    return dem;
}

int main() {
    unsigned long n;
    cout << "Nhap so nguyen duong n:";
    cin >> n;
    cout << demNT(n);
    return 0;
}

Trong mã này, tôi đã định nghĩa một hàm isPrime để kiểm tra xem một số có phải là số nguyên tố không. Sau đó, tôi đã sửa hàm demNT để đếm số lần xuất hiện của các chữ số nguyên tố bằng cách sử dụng hàm isPrime .

Các chữ số nguyên tố trong hệ decimal chỉ có 2, 3, 5, 7, đâu cần viết hàm kiểm tra nguyên tố đâu bạn :stuck_out_tongue:

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