Trang 1 trên tổng số 9 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 88 kết quả

Đề tài: [C] Hàm Nguyên tố ??? sao nhỉ ?

  1. #1
    Ngày gia nhập
    11 2006
    Bài viết
    4

    Mặc định [C] Hàm Nguyên tố ??? sao nhỉ ?

    các bạn à mình viết 1 đoạn hàm nguyên tố như sau :

    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    int nt(int n){
    if(n==1) return(0);
    for(int i=2;i<sqrt(n);i++)
    if(n%i==0) return(0);
    return(1);// hoặc là return(n); cũng thế
    }
    ....

    với đoạn code như trên khi mình chạy thì cứ số lẻ thì đc cho là số nguyên tố .
    bạn nào giúp mình viết lại hàmnguyen tố trên nha !

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Code:
    int nguyento(unsigned int n)
    {
    
    	unsigned int i,k;
    	k=(int)sqrt(n);
    	if(n==0||n==1) return 0;
    	if(n==2) return 1;
    	for(i=2;i<=k;i++)
    		if(n%i==0)return 0;
    	return 1;
    }
    Số 2 vẫn được coi là nguyên tố đó bạn.
    Thông thường số nguyên tố là số lẽ. Số chẳn lớn hơn hai thì tất nhiên là không phải nguyên tố rồi vì nó chia hết cho hai mà.
    Đã được chỉnh sửa lần cuối bởi shinichi_haha : 26-12-2006 lúc 07:03 PM.

  3. #3
    Ngày gia nhập
    08 2006
    Bài viết
    19

    Trích dẫn Nguyên bản được gửi bởi anhtu08
    các bạn à mình viết 1 đoạn hàm nguyên tố như sau :

    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    int nt(int n){
    if(n==1) return(0);
    for(int i=2;i<sqrt(n);i++)
    if(n%i==0) return(0);
    return(1);// hoặc là return(n); cũng thế
    }
    ....

    với đoạn code như trên khi mình chạy thì cứ số lẻ thì đc cho là số nguyên tố .
    bạn nào giúp mình viết lại hàmnguyen tố trên nha !
    tôi có vài ý kiến thế này:
    bài của bạn chưa xử lý với trường hợp n<1, đó không là số nguyên tố
    với n=2,3 thì sqrt(n)<2, chương trình của bạn chưa xử lý được. với n=2 thì phải đặt ra 1 trường hợp riêng để xử lý.
    với n=4,9, 25.... chương trình sẽ bị sai do trong
    for(int i=2;i<sqrt(n);i++)
    đáng lý phải đặt là ceil(sqrt(n)). việc là tròn này rất quan trọng. nó tránh cho bạn bị sai khi n là bình phương của 1 số nguyên tố
    bạn hãy thử với code tôi vừa gõ:
    Code:
    int ngto(int x)
    {
     int i;
     if (x<=1) return(0);
     if (x==2) return(1);
     for (i=2;i<=ceil(sqrt(x));i++)
    	 if (x%i==0) return(0);
     return(1);
    }

  4. #4
    Ngày gia nhập
    11 2006
    Bài viết
    4

    Số 2 vẫn được coi là nguyên tố đó bạn.
    Thông thường số nguyên tố là số lẽ. Số chẳn lớn hơn hai thì tất nhiên là không phải nguyên tố rồi vì nó chia hết cho hai mà.
    mình biết điều đó nhưng khi mình gõ đoạn code trên thì các sõ kô phải số nguyên tố vẫn đc gán thành só nguyên tố, vd như 15 hay 21 đó. và mình không biết thuật toán đã sai ở chỗ nào ????
    để mình thử 2 cách của các bạn xem nha. cám ơn vì sự giúp đỡ nhiệt tình của các bạn !!

  5. #5
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Bạn dùng vòng for trong trường hợp này rất khó kiểm soát chương trình, lời khuyên của tôi là nên dùng while, đây là code tôi viết trên C++:
    Code:
    #include <iostream>
    #include <cmath>
    using namespace std;
    bool nt(int n){
        if(n < 2) return false;
        if (n == 2) return true;
        int i = 2;
        while ( (i <= (int)sqrt(n)) && (n%i != 0) ) ++i;
        if(n%i != 0) return true;
        else return false;
    }
    int main(){
        system("cls");
        cout <<"Nhap so: "; int n; cin >>n;
        if (nt(n)) cout <<"La snt.";
        else cout <<"Ko la snt.";
        system("pause");
        return 0;
    }

  6. #6
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Mặc định [C] Hàm Nguyên tố ??? sao nhỉ ?

    @anhtu sai ở cái return ) ; xí hổ quá bỏ kiểu viết < return (0) đi nhé -> sửa thành return 0
    None!

  7. #7
    Ngày gia nhập
    11 2006
    Bài viết
    4

    @anhtu sai ở cái return ) ; xí hổ quá bỏ kiểu viết < return (0) đi nhé -> sửa thành return 0
    viết return(0); vẫn dc chấp nhận mà TC3.0 đâu có báo lỗi gì dâu và vẫn chạy ngon lành đó nha.

    cám ơn các bác đã giúp giờ thì mình viết đc hàm nguyên tố này rồi
    nhưng mình mới học C chưa học C++ nên có bác viết bằng C++ mình hổng có hiểu

    bây giờ lại có thêm 1 bài thuộc dòng căn bản nữa nhờ các bác nha :

    hãy tính tổng các chữ số có trong 1 số :
    vd mình nhập vào số 1234 thì nó cho ra tổng T=1+2+3+4=10

    mình chưa biết cách nào để tách các số đó ra để cộng vào ??? có phải dùng phép chia lấy dư kô nhỉ ???

  8. #8
    No Avatar
    CCmaster Khách

    Số nguyên tố người ta thường dùng định lý phéc ma nhỏ để kiểm tra. Các hàm trên dùng cũng được, nhưng là số nhỏ thôi!

  9. #9
    Ngày gia nhập
    11 2006
    Bài viết
    4

    Số nguyên tố người ta thường dùng định lý phéc ma nhỏ để kiểm tra. Các hàm trên dùng cũng được, nhưng là số nhỏ thôi!
    bạn có thể viết thử 1 đoạn code dùng định lý fecma cho mọi người tham khảo nha .

  10. #10
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Chú ý: return x và return (x) ;theo pete biết là cách thức hoạt động khác nhau. Còn tùy thuộc vào compiler nữa .

    Còn cái bài tính tổng kia thì đơn giản thôi :
    * Tất cả các số nhập váo ở dạng string hết sau đó convert từng phần tử trong chuỗi sang số và thực hiện tổng đến số cuối ( số cuối ở vị trí : số phần tử chuỗi - 1 ).

    Good Luck !
    None!

Các đề tài tương tự

  1. Bài tập C giải thuật nhập vào số nguyên n in ra n số nguyên tố đầu tiên?
    Gửi bởi LTC trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 48
    Bài viết cuối: 25-04-2013, 07:40 PM
  2. Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên.
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 19-06-2011, 01:05 PM
  3. Game Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên trên C#?
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 18
    Bài viết cuối: 08-06-2011, 11:12 PM
  4. Bài tập C++ chương trình đổi 1 số nguyên trong hệ thập phân sang hệ fibo và cộng 2 số nguyên được
    Gửi bởi nghiapro512 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 23-01-2011, 02:14 PM
  5. Lập trình C xin code cài đặt thuật toán sàng nguyên tố để liệt kê các số nguyên tố 2->480000
    Gửi bởi ngocdung_088 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 06-12-2010, 11:53 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn