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;
}
Phạm Hoàng Tuấn viết 18:17 ngày 30/09/2018

Giúp gì e? e viết rõ tiêu đề topic va nói rõ vấn đề của e chứ ???

Thực tế khắc nghiệt viết 18:18 ngày 30/09/2018

nó chạy lag cả màn hình in tùm lum đại ca xem nó sai ở đâu ạ!

Phạm Hoàng Tuấn viết 18:21 ngày 30/09/2018

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

Đề bài : tìm số nguyên tố gần với số n nhập từ bàn phím (nêu n la sô nguyên tố thì n la kết quả luôn) #include "stdio.h" #include "math.h" #include "conio.h" int main(int argc, char* argv[]) { int n,i,ngto, souoc,k,t,j,h,g,u1,u2; printf("nhap so can kiem tra: "); scanf("%d",&n); ngto=(n<2)?0:1; for(i=2;i<= sqrt((float)n);i++) if (n%i== 0) { ngto =0; break; } if(ngto==1) …
BaoLe viết 18:07 ngày 30/09/2018

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ể:

  1. Bạn khai báo là: 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:
#include<stdio.h>
#include<math.h>
void so_nguyen_to(int n);
int main()
{
    so_nguyen_to(11);
    return 0;
}
void so_nguyen_to(int n)
{
    int check=1;
    for(int i=2; i<sqrt((double)n)&&check; i++)
        check=n%i;
    if(check)
        printf("%d la so nguyen to.",n);
    else
        printf("%d khong la so nguyen to.",n);
}
Thực tế khắc nghiệt viết 18:13 ngày 30/09/2018

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!

Nguyễn Minh Dũng viết 18:21 ngày 30/09/2018

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é

Là một lập trình viên chuyên nghiệp Đạt tích lũy được kinh nghiệm lập trình thông qua nhiều năm tự học và làm việc. Quá trình tự học đó kéo dài, nhưng chung quy lại việc học lập trình bao gồm các quá trình tìm hiểu(1) => thắc mắc(2) => hỏi(3) => thảo luận(4) => hiểu(5) => thực nghiệm(6) => hướng dẫn ngược trở lại(7). Đối với nhưng người mới học lập trình 1 năm thì việc học sẽ dừng lại ở mức thắc mắc(2) hoặc mức hỏi(3). Ở mức độ thắc mắc(2) nếu người học lập trình bỏ cuộc mà không đi tìm hiểu th…
Là một lập trình viên chuyên nghiệp Đạt tích lũy được kinh nghiệm lập trình thông qua nhiều năm tự học và làm việc. Quá trình tự học đó kéo dài, nhưng chung quy lại việc học lập trình bao gồm các quá trình tìm hiểu(1) => thắc mắc(2) => hỏi(3) => thảo luận(4) => hiểu(5) => thực nghiệm(6) => hướng dẫn ngược trở lại(7). Khi đạt đến bước (3)hỏi thì bạn đã thở phào nhẹ nhõm, pha một ly cafe rung đùi chờ câu trả lời được rồi chứ. Nhầm to rồi, không có gì là miễn phí cả. Hãy tiếp tục bằng cách thảo lu…
Thực tế khắc nghiệt viết 18:15 ngày 30/09/2018

dạ e sẽ cố gắng!

Thực tế khắc nghiệt viết 18:10 ngày 30/09/2018

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!

Đỗ Trung Quân viết 18:17 ngày 30/09/2018

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;

   int so_NT(long n){
          long m,k;
          if(n<2) return 0;
          if(n==2||n==3 || n==5) return 1; 
          if(n%2==0 || n%3==0 || n%5==0) return 0;
          m=sqrt(n); 
          k=7;
          while(k<=m){
                   if(n%k==0) return 0;
                   if(n%(k+4)==0) return 0;
                   k=k+6;
          }
         return 1;
   }
Đỗ Trung Quân viết 18:21 ngày 30/09/2018

i@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!

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.

Thực tế khắc nghiệt viết 18:12 ngày 30/09/2018

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

Bài liên quan
0