Cần chỉ cách gọi hàm xét số nguyên tố

Đề: cho một số nguyên dương, đếm xem n có bao nhiêu chữ số là số nguyên tố. VD 455 có 2 số nguyên tố
Mình định viết một cái hàm tính số nguyên tố riêng rồi viết một cái hàm xét lấy từng chữ số của số n ra để xét nhưng mình chưa hiểu rõ cách gọi hàm xét số nguyên tố ra trong một hàm khác lắm mọi người giúp mình với

#include<stdio.h>
#include<math.h>
void nhap( int &n);
int xet( int n, int x);
int SNT( int x);
void xuat( );
void main()
{
	int n,dem,x;
	nhap(n);
	SNT(x);
	int d=xet(n,x);
	xuat(dem);
}
void nhap( int &n)
{
	scanf("%d",&n);
}
int SNT( int x)
{
	int dem =0;
	if (x < 2)    
        return 0;

    for (int i = 2; i <= sqrt((float)x); i ++)
    {
        if (x%i==0)
            return 0;
        else  dem= dem +1; return dem;
	}
}
int xet( int n, int x)
{
	while(n!=0)
		{
		x=n%10;
		n=n/10;
	    SNT(int x);
		}
return SNT;
}

SNT(x) thôi bạn ơi.
Cho return trong vòng while luôn.
Để lỡ nó có 2 số hay 3 số nt thì nó xuất hết. Còn bạn làm ở ngoài như vậy nó chỉ xuất số nt x cuối.

Hàm kt snt là trả về 1:0(hàm này viết kiểu đếm ước số) nên bạn phải viết hàm if trong vòng while nhe

if(SNT(x)==1) return x;

1 Like

ban có thể nói rõ hơn cái chỗ gọi hàm ko tại mình ms học C nên không rành lắm

Hàm SNT() trong ngoặc là truyền tham số vào, để nó kiểm tra.
Ở đây là x, thì truyền x vào.
SNT(x), mà x ở đây chính là n%10, nên bạn đặt x vô là ok.
Hàm này xuất nhiều giá trị thì bạn làm hàm void. Rồi in ra luôn, ko cần return nhe.

Trong vòng while
if(SNT(x)==1)
Printf(“%d”,x);

Coi lại hàm kt snt, dòng cuối return 1 thôi được rồi ko cần đếm.
Còn bạn viết kiểu đếm ước số bằng 2 thì phải so sánh dk rõ ràng ra.

1 Like

Bạn dùng C thì bỏ dấu & thay bằng dấu * nhé

1 Like

mình viết theo kiểu chương trình con bạn ơi. Nhưng bạn có thể nói rõ từng chỗ sai trong chương trình của mình không tại mình khá dốt trong môn này. Chương trình của mình đây

#include<stdio.h>
#include<math.h>
void nhap( int &n);
int xet( int n, int x);
int SNT( int x);
void xuat(int d);
void main()
{
	int n,x;
	nhap(n);
	SNT(x);
	int d=xet(n,x);
	xuat(d);
}
void nhap( int &n)
{
	scanf("%d",&n);
}
int SNT( int x)
{
	int dem =0;
	if (x < 2)    
        return 0;
	else
    for (int i = 2; i <= sqrt((float)x); i ++)
    {
        if (x%i==0)
            return 0;
        else  dem= dem +1; 
	}
	return dem;
}
int xet( int n, int x)
{
int t;
	while(n!=0)
		{
		x=n%10;
		n=n/10;
	    t=SNT(x);
		}
return t;
}
void xuat(int d)
{
	printf("%d",d);
}

hàm nhập phải đưa int*n vào thay vì int &n
hàm snt nên dùng kiểu dữ liệu bool và bỏ biến dem đi
ở hàm xet thì t là biến đếm, nếu SNT(x) true thì t++

1 Like

bạn ơi giải thích cho mình cái khúc int*n đi tại sao ko p int&n và *n nghĩa là gì

int &n: reference, C không có khái niệm này.
*n: khái niệm con trỏ.

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