30/09/2018, 16:07
Lặp vô hạn bài toán kiểm tra 1 số là số nguyên tố
#include <stdio.h>
void so_nguyen_to(int n);
int main()
{
printf("%s",so_nguyen_to(11));
return 0;
}
void so_nguyen_to(int n)
{
if (n==3||n==5||n=7)
printf("so nay la so nguyen to");
if (n<2)
printf("so nay ko phai so nguyen to");
if (n==2)
printf("so nay la so nguyen to");
if (n%2==0)
printf("so nay ko phai so nguyen to");
for (int i=3; i*i%n; i=i+2) {
if (i%n) printf("so nay ko phai so nguyen to");
else
printf("so nay la so nguyen to");
}
return;
}
Bài liên quan
Giúp gì e? e viết rõ tiêu đề topic va nói rõ vấn đề của e chứ ???
nó chạy lag cả màn hình in tùm lum đại ca xem nó sai ở đâu ạ!
Có phải bài của e là kiểm tra 1 số có phải số nguyên tố hay không, e tham khảo bài này. A sẽ sửa lại tiêu đề cho e lần này, lần sau e nên đặt câu hỏi cụ thể hơn
Xét về cú pháp của các câu lệnh thì code của bạn bị lỗi rồi.Cụ thể:
void so_nguyen_to(int n);
.tức là hàm này không trả về hàm gọi nó bất kì giá trị nào cả.Nhưng ở câu lệnh:
printf("%s",so_nguyen_to(11));
bạn lại lại bắt nó trả về 1 giá trị là không được.
2.
if (n==3||n==5||n=7)
.biểu thức
n==3||n==5||n=7
:lúc này bạn đang so sánh n với 3,5,7,kiểm tra xem giá trị của n có bằng một trong 3 giá trị trên không, nên bạn phải sửa lại như sau:n==3||n==5||n==7
.Để kiểm tra 11 có phải là số nguyên tố hay không, mình xin được trình bày ý tưởng của mình như sau:
tks bác @14520054 cái ý tưởng trả về check là hay! tại trong link bài 35 mình để int! mà chạy hk ra lên ra đây post cho mọi ng giải đáp sớm! chứ a Đạt bận mai mới reply đc! mình thiếu sót trong phép so sánh =7 mà đúng là ==7!
Không liên quan tới câu hỏi nhưng cho anh góp ý một tí. Lần này @Honey_moon đạt câu hỏi hơi “tệ”, em đọc thêm 2 tác phẩm văn học hiện thực phê phán anh mới viết ở đây nhé
dạ e sẽ cố gắng!
i<sqrt((double)n) @ltd e nhớ kiến thức hồi cấp 3 của e! lấy căn bậc 2 của n không bằng mình bình phương i lên cũng được! cần j phải dài dòng như này ! e mới thử lúc nãy cho kết quả bt mà! chả hiểu sao lên google toàn thấy cái sqrt ko à. mà hàm này e chưa học tới! lên xem thì là căn bậc 2!
Có lẽ ý của bạn là kiểm tra 1 số có phải là số nguyên tố hay không?
Mình có cái code này cho bạn, vẫn chưa nhanh lắm, nhưng cũng gấp 1/3 lần tính theo sqrt() thông thường;
Nếu bạn có học môn Giải thuật nào đó có nói về độ phức tạp của thuật toán bạn sẽ thấy code càng ít câu lệnh, chạy vòng lặp ít, thực thi trong thời gian ngắn trong nhiều trường hợp là vô cùng tốt.
Bạn lập trình 1 cái máy tính bỏ túi casio có chức năng tìm số nguyên tố. Muốn tính theo bạn là i bình phương cũng chẳng sao cả. Nhưng bù lại thời gian chạy chương trình lâu hơn. Khi đó bạn phải đợi nó chạy i bình phương vòng lặp chưa kể điều kiện mới ra kết quả. Ví dụ mất khoảng 3s, trong khi người khác chỉ mất 1s.
có phải là 1/3 căn n đúng ko?( tối ưu hoá so vs hiệu suất của bài sqrt là 3 lần thì vs e là 6 lần. 1 ng bạn của e cũng gửi cho e xem cái code này! Nhưng thú thực là e ko hiểu lúc đó! còn bjo thì e sau khi đã giải xong e mới hiểu! cái của a nâng cao rồi. A cứ chỉ e ba cái cách giải (nếu như e sai hướng),cũng như hàm e sai. Chứ giải cách e hiểu còn chưa xong tối ưu chắc e nhảy cầu quá ! cảm ơn a