Bài toán xác định 1 số có phải số nguyên tố ko bằng ngôn ngữ c

#include<stdio.h>
#include<stdlib.h>
int songuyento(int);

int songuyento(int,int){
    int n,dem=0;
    for(int i=1;i<=n;++i){
        if(n%i)==0){
            ++dem;
            return dem;
        }
    }

}

int main(){
    int n,dem,i;
    printf("nhap n=");scanf("%d",&n);
    printf("ket luan:%d", songuyento(dem,i));
    if(dem==2) printf("\nso nguyen to");
    else  printf("\nko la so nguyen to");
    return 0;
}

e là người mới học lập trình, e ko biết e sai ở đâu mà số nào nó cx ra “ko là so nguyen to”
anh chị chỉ giúp e với ạ, e cảm ơn ạ

Bạn bị sai ở
return dem;
print thử biến dem ở đó ra thì biết bạn ạ

e print ở hàm main rồi đấy nhưng nó toàn ra 1

nhap n=2
ket luan:1
ko la so nguyen to
------------------------------------
Process exited after 2.646 seconds with return value 0
Press any key to continue...

thì mình nói ở trên rồi mà.
Bạn đang sai ở return dem;
Bạn nên xem lại chút lý thuyết trước nhé:

thế phải sửa thể nào mới đúng ạ, e đọc cx ko hiểu lắm

ở chỗ cho vào tham số tại sao là int songuyento(int,int) mà không phải là int soNguyenTo(int n){} vậy bạn? Và hàm return xuất hiện ở vòng lặp for thì mọi số đều % 1 = 0 nên khi tới chỗ if, lệnh return sẽ thực hiện và cho ngừng vòng lặp lại. Và gửi giá trị là biến đếm là 1 về nhé!

vì mk khai báo n ở ngay dưới đó r, chỗ trong ngoặc đấy là biến gì cx đc mà

Bạn đọc lại phần cmt của mình và xem lại code của bạn nhé!

mk sửa đưa return ra ngoài vòng lặp for và nó vẫn như vậy

Đó mới là vấn đề ở chỗ truyền vào tham số, nếu như bài code của bạn ở trên thì số n = 0. Nên sẽ return về đếm + 1.
Để kiểm tra số nguyên tố bạn chỉ cần truyền vào số cần kiểm tra đó là n mà thôi.

1 Like

đầu tiên thì bạn sẽ sai chỗ tham số đầu vào n, vì nếu bạn gọi hàm songuyento(dem,i) thì sẽ không có giá trị n, và khi đó chương trình sẽ coi n=0, nên 0%1 thì dem=1, thứ 2 là return bạn để trong vòng for thì nó sẽ trả về cho bạn luôn dem=1, thứ 3 là lệnh if(dem==2) của bạn sai nữa, dưới đây là code mình sửa 3 chỗ đó cho bạn:

#include<stdio.h>
#include<stdlib.h>
int songuyento(int);

int songuyento(int n){
    int dem=0;
    for(int i=1;i<=n;++i){
        if((n%i)==0){
            ++dem;
            //return dem;
        }
    }
	return dem;
}

int main(){
    int n,dem,i;
    printf("nhap n=");scanf("%d",&n);
    printf("ket luan:%d", songuyento(n));
    if(songuyento(n)==2) printf("\nso nguyen to");
    else  printf("\nko la so nguyen to");
    return 0;
}
1 Like

mk hiểu r,cảm ơn bn nhiều nhá

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