01/10/2018, 00:34

Xin hướng dẫn bài đếm số nguyên tố

VCT nhập vào 2 số nguyên dương a và b (a < b). Nếu nhập sai yêu cầu nhập lại.

Đếm có bao nhiêu số nguyên tố trong đoạn từ a đến b.

pơ phếc viết 02:35 ngày 01/10/2018

gợi ý bạn là dùng do-while kiểm soát điều kiện nhập, gán một biến đếm để chạy vòng for rồi sử dụng biến đếm thứ 2 để đếm số nguyên tố

viết 02:43 ngày 01/10/2018

Bạn dùng vòng while vô hạn để tạo điều kiện nhập, nếu nhập đúng thì break. Có thể viết một hàm riêng để kiểm tra số nguyên tố, rồi for từ a đến b, khai báo thêm biến đếm số lượng số nguyên tố.
Bạn viết code đi rồi post lên đây để sửa.

Đào Thành Đạt viết 02:42 ngày 01/10/2018

e chỉ có thể viết đc như này , sai chỗ nào chỉ e với , e cảm ơn

#include <stdio.h>

int main ()
{
    int a,b,dem;
    do
    {
        printf ("Nhap a:");
        scanf ("%d",&a);
        printf ("Nhap b :");
        scanf ("%d",&b);
    }
    while (a>=b);
    for (int n=a ; n<=b; n++)
    {
        int dem=0;
        for (int i=2; i<n; i++)
        {
            if (n%i!=0)
                dem++;
        }
    }
    printf ("co %d so nguyen to ",dem);
    if (dem==0)
    {
        printf ("khong co so nguyen to nao ");
    }
}
viết 02:39 ngày 01/10/2018

Sai chỗ này, nếu n = 6, mình chạy từ 2, 3, 4, đến 4 là sai rồi vì 6 % 4 != 0, biến đếm vẫn tăng.

for (int i=2;i&lt;n;i++)
{
if (n%i!=0)
dem++;
}

Code của mình:

#include <stdio.h>
#include <math.h>

int isPrime(int n)
{
	int i;
	if (n < 2) return 0;
	for (i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0) return 0;
	}
	return 1;
}

int main()
{
	int a, b, count = 0;
	while (1)
	{
		printf("Nhap a va b: ");
		scanf("%d%d", &a, &b);
		if (a < b) break;
	}
	for (int i = a; i <= b; i++)
	{
		if (isPrime(i)) count++;
	}
	printf("Co tong cong %d so nguyen to\n", count);
	return 0;
}
Bài liên quan
0