Announcement

Collapse
No announcement yet.

[Help] Kiểm tra n có phải là số nguyên tố hay k?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 08520492
    replied
    Có lẽ ý của bạn 652 là như thế này:
    Đơn giản xét 2 số 2 và 3 thôi. Đã là số ngto(> 2, 3) thì sẽ không chia hết cho 2 và 3, nên nó sẽ có dạng 6i + 1 hoặc 6i + 5 (6i +- 1). Nên trong 6 số thì chỉ cần xét 2 số này (bước nhảy 2, 4), tiết kiệm được 2/3 số bước phải chạy. Tương tự nếu xét luôn số 5 thì số bước phải chạy chỉ là 8/30 (30i +- (1, 7, 11, 13)).
    Thông thường người ta chỉ xét tới (2, 3) thôi, không cần phải sử dụng thêm 1 mảng để lưu trữ các bước nhảy. Như trường hợp xét tới số 5 thì bước nhảy là (2, 4, 6, 2, 6, 4, 2, 4).

    Leave a comment:


  • 12520782
    replied
    Originally posted by 12520527 View Post
    121 không chia hết cho 2,3,5,7 nhưng đâu phải số nguyên tố anh :nosebleed:
    bạn hiểu sai ý rồi, câu ảnh nói ý là đó phải là SỐ NGUYÊN TỐ trước thì sau đó mới thỏa việc không chia hết cho 2,3,5,7 với số đó phải lớn hơn 7 ;còn bạn thì lấy đại 1 số không chia hết cho 2,3,5,7 nhưng chia hết cho 11 nếu bạn lấy 187 cũng thế vậy. mà theo anh đó thì cách đó mình cũng không nghĩ ra cách viết như thế nào!

    Leave a comment:


  • 12520527
    replied
    Originally posted by 09520652 View Post
    Theo mình thì còn 1 cách đó là: Số nguyên tố thì ko chia hết cho các số 2, 3, 5,7 với yêu cầu số đó lớn hơn 7
    121 không chia hết cho 2,3,5,7 nhưng đâu phải số nguyên tố anh :nosebleed:

    Leave a comment:


  • 09520200
    replied
    Vớ vẩn...thế thì nếu số đó là tích của 2 số nguyên tố lớn hơn 7 thì sao? 143 chẳng hạn...=))

    Leave a comment:


  • 09520652
    replied
    Theo mình thì còn 1 cách đó là: Số nguyên tố thì ko chia hết cho các số 2, 3, 5,7 với yêu cầu số đó lớn hơn 7

    Leave a comment:


  • 12520527
    replied
    Originally posted by 08520195 View Post
    vậy trường hợp số cực lớn (phải lưu = chuỗi) thì dùng sqrt ra sao
    Với các số lớn thì có thể dùng sàng Eratosten để kiểm tra số nguyên tố, nhưng số lớn đến nỗi phải lưu = chuỗi thì không biết làm thế nào :smile: Anh biết thì có thể chia sẻ được không ạ udency:

    Leave a comment:


  • 08520195
    replied
    Originally posted by 11520579 View Post
    theo ý kiến của mình thì nên để vòng for(int i=1;i<sqrt(n);i++)
    như thế thì vòng lặp cũng đã lớn lắm rồi
    và nhớ là phải ép kiểu dữ liệu về số nguyên (int) khi tính căn
    vậy trường hợp số cực lớn (phải lưu = chuỗi) thì dùng sqrt ra sao

    Leave a comment:


  • 11520579
    replied
    theo ý kiến của mình thì nên để vòng for(int i=1;i<sqrt(n);i++)
    như thế thì vòng lặp cũng đã lớn lắm rồi
    và nhớ là phải ép kiểu dữ liệu về số nguyên (int) khi tính căn

    Leave a comment:


  • 11520317
    replied
    Originally posted by 12520471 View Post
    tình hình là làm xong mà nhập số 3 vs 5 nó bảo k phải là số nguyên tố!:sogood:
    xin các huynh chỉ giáo giúp.e new zo nên còn gà!
    Bạn có thể tham khảo thêm cách làm như sau. Có rất nhiều cách thể hiện, sau đây bonus cho bạn 1 cách:

    int main()
    {
    int n, i;
    bool SNT = false;
    printf("\nNhap vao N: ");
    scanf("%d",&n);
    if (n > 1)
    {
    SNT = true;
    for (i = 2; i <= n/2; i++)
    if(n % i == 0)
    {
    SNT = false;
    break;
    }
    }
    if (SNT == true)
    printf("%d la so nguyen to!",n);
    else
    printf("%d khong la so nguyen to.");
    return 0;
    }
    Last edited by 11520317; 27-10-2012, 19:25.

    Leave a comment:


  • 08520194
    replied
    nếu n là số lớn thì vòng for phải lặp rất nhiều, n = 7919 thì vòng for lặp 7919 lần.
    for(int i = 1; i<= n && s<=3; i++){}

    Leave a comment:


  • 12520471
    replied
    hì.thế mà mình k thấy...cứ tưởng {} là no nằm trong for chứ.:sogood:
    tks bạn nhé.:kiss:

    Leave a comment:


  • 12520143
    replied
    có ăn nhập đó anh. nếu cho i chạy từ 1 tới n thì đơn nhiên nếu là số nguyên tố thì nó phải chia hết cho 1 và n thì lúc đó s mới =2 được. còn nếu không phải là số nguyên tố thì s phải lớn hơn 2. còn bài của bạn thì đúng rồi, chỉ cần bỏ dâu ; sau hàm for là được. vì khi bạn viết dấu ; sau hàm for thì nó hiểu là đã kết thúc hàm for. vậy thì hàm if.... sau nó ko thuộc hàm for nên s vẫn = 0 cho nên nó báo ko phải là số nguyên tố rồi.
    Originally posted by 10520121 View Post
    Đoạn code của e có thể hiểu là:

    - Nhập số n, cho i chạy từ 1 tới n, nếu n chia hết cho i thì tăng s 1 đơn vị. s = 2 thì nó là snt còn khác 2 thì nó ko phải số nguyên tố..

    - Còn số nguyên tố là số chia hết cho 1 và chính nó.

    Hai cái trên ko ăn nhập gì với nhau cả.

    Như vậy e đã thấy mình sai gì chưa

    Leave a comment:


  • 10520121
    replied
    Đoạn code của e có thể hiểu là:

    - Nhập số n, cho i chạy từ 1 tới n, nếu n chia hết cho i thì tăng s 1 đơn vị. s = 2 thì nó là snt còn khác 2 thì nó ko phải số nguyên tố..

    - Còn số nguyên tố là số chia hết cho 1 và chính nó.

    Hai cái trên ko ăn nhập gì với nhau cả.

    Như vậy e đã thấy mình sai gì chưa

    Leave a comment:


  • [Help] Kiểm tra n có phải là số nguyên tố hay k?

    tình hình là làm xong mà nhập số 3 vs 5 nó bảo k phải là số nguyên tố!:sogood:
    xin các huynh chỉ giáo giúp.e new zo nên còn gà!
    #include <stdio.h>
    #include <conio.h>
    void main()
    {
    int n,i,s=0;
    printf("nhap gia tri cua n");
    scanf("%d",&n);
    for (i=1;i<=n;i=i+1);
    {
    if(n%i==0) s=s+1;
    }
    if(s==2) printf("so da cho la so nguyen to");
    else printf("so da cho k phai la so nguyen to");
    }

LHQC

Collapse
Working...
X