Announcement

Collapse
No announcement yet.

Code C !! Nhập n xuất ra n số nguyên tố đầu tiên trở đi.

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

  • Code C !! Nhập n xuất ra n số nguyên tố đầu tiên trở đi.

    Giúp em làm bài này với, tưởng dễ nhưng đến lúc làm thì nó lu bu nhiều cái :shock::shock: .Thank !!

    PS: ý của em thế này : n = 3 => 2 3 5
    n = 5 => 2 3 5 7 11 . Làm trên C nha ( em mới học xong cái hàm thui :cry
    Hãy cứ sống một cách thật tuyệt vời, rồi những điều tốt đẹp sẽ đến với bạn !!

  • #2
    Cách 1: Em lập hàm bool isPrime(int x), nhận vào x, return true nếu x là ngtố, false nếu x ko là nguyên tố
    xong
    Code:
    for (i = 2,soNguyenToDaXuat = 0;soNguyenToDaXuat < n;++i)
    if (isPrime(x) == true)
    {
    ++soNguyenToDaXuat; //nên đặt tên biến khác ngắn gọn hơn
    //in i ra màn hình
    }
    Cách 2: Em lên mạng search wiki bài: sàng số nguyên tố, xong chuyển qua wiki tiếng anh, có tấm hình thuật toán mô phỏng (cách này code nhiều hơn 1 chút, nhưng chạy nhanh hơn). Đây là gợi ý thôi, anh không tìm giúp cho đâu.
    Khoảng cách giữa bạn và ước mơ của bạn là bao xa ?

    Comment


    • #3
      Cách của anh:
      Dùng 1 mảng để chứa n số nguyên tố mà e nói:
      1 số là số nguyên tố sẽ không chia hết cho các số nguyên tố bé hơn hoặc = căn bậc hai của nó.
      Như vậy thì mảng đầu của ta là 2, số tiếp theo là 3 vì 3 ko chia hết cho 2, số tiếp là 5 vì không chia hết cho 2, số tiếp là 7 vì không chia hết cho 2, số tiếp là 11 vì không chia hết cho 2 và 3. Cứ z thôi )

      Comment


      • #4
        Code C

        Đây là code đầy đủ tự tối ưu code lại nhé...
        Code:
        #include <stdio.h>
        #include <conio.h>
        
        int Ngto(int n)
        {
        	int i;
        	for(i=2;i<n;i++)
        	{
        		if(n%i==0)
        		{
        			break;
        		}
        	}
        	if(i==n)
        		return 1;
        	return 0;
        }
        
        void main()
        {
        	int n;
        	printf("\n n = ");scanf("%d",&n);
        	int dem = n;
        	for(int i=2;i<100;i++)
        	{
        		if(Ngto(i))
        		{
        			printf("%4d",i);
        			dem--;
        		}
        		if(dem==0)
        			break;
        	}
        	getch();
        }

        Comment


        • #5
          Originally posted by 12520333 View Post
          Giúp em làm bài này với, tưởng dễ nhưng đến lúc làm thì nó lu bu nhiều cái :shock::shock: .Thank !!

          PS: ý của em thế này : n = 3 => 2 3 5
          n = 5 => 2 3 5 7 11 . Làm trên C nha ( em mới học xong cái hàm thui :cry
          Xem thử dc chưa nhé.
          PHP Code:
          #include <stdio.h>
          #include <math.h>

          int ktSNT (int n)
          {
              if (
          n<2) return 0;
              for (
          int i=2,temp=int(sqrt(double(n))); i<=tempi++)
                  if (
          n%i==0) return 0;
              return 
          1;
          }
          int main (int N)
          {
              
          printf("N= ");
              
          scanf("%d", &N);
              for(
          int i20Ni++)
              {
                  if(
          ktSNT(i) == 1)
                  {
                      
          printf("N[%d]= %d   "ci);
                      
          c++;
                  }
              }
              return 
          0;

          Comment


          • #6
            Originally posted by 12520333 View Post
            Giúp em làm bài này với, tưởng dễ nhưng đến lúc làm thì nó lu bu nhiều cái :shock::shock: .Thank !!

            PS: ý của em thế này : n = 3 => 2 3 5
            n = 5 => 2 3 5 7 11 . Làm trên C nha ( em mới học xong cái hàm thui :cry
            Em có thể tham khảo bài này nhé. Trước tiên muốn in ra n số nguyên tố đầu tiên thì em cần có hàm kiểm tra số i có phải là 1 số NT hay không. Nếu là 1 số NT thì sẽ in ra và tăng giá trị biến đếm count_SNT lên 1 đơn vị. Nếu count_SNT bằng với số N thì nghĩa là đã in đủ N số NT đầu tiên, khi đó ta sẽ break ra khỏi vòng lặp và kết thúc chương trình.

            PHP Code:
            #include "stdio.h"

            bool SNT(int x)
            {
                
            int i;

                if (
            <= 1)
                    return 
            false;

                for (
            2<= x/2; ++i)
                    if (
            == 0)
                        return 
            false;
                
                return 
            true;
            }

            int main()
            {
                
            int ncount_SNT;
                
            int i;

                do
                {
                    
            printf("\nNhap vao so N (N > 0): N = ");
                    
            scanf("%d", &n);
                } while (
            <= 0);

                
            2;
                
            count_SNT 0;

                while (
            true)
                {
                    if (
            SNT(i))
                    {
                        
            printf("%d "i);    
                        ++
            count_SNT;
                    }

                    ++
            i;

                    if (
            count_SNT == n)
                        break;
                }
                
                return 
            0;

            Top Best Online - The Best Products Review Website

            Comment


            • #7
              t cũng làm y như Quý, khác 1 chỗ là while(count_SNT<n) , khỏi phải break, mệt
              Last edited by 11520086; 24-11-2012, 16:47.

              Comment


              • #8
                Originally posted by 10520303 View Post
                Đây là code đầy đủ tự tối ưu code lại nhé...
                Code:
                #include <stdio.h>
                #include <conio.h>
                
                int Ngto(int n)
                {
                	int i;
                	for(i=2;i<n;i++)
                	{
                		if(n%i==0)
                		{
                			break;
                		}
                	}
                	if(i==n)
                		return 1;
                	return 0;
                }
                
                void main()
                {
                	int n;
                	printf("\n n = ");scanf("%d",&n);
                	int dem = n;
                	for(int i=2;i<100;i++)
                	{
                		if(Ngto(i))
                		{
                			printf("%4d",i);
                			dem--;
                		}
                		if(dem==0)
                			break;
                	}
                	getch();
                }
                Cảm ơn mấy anh đã trợ giúp: bài này khá dễ hiểu dành cho gà như em đc và code của anh Thành Trung thì ngắn nhưng khó hỉu đoi chút (đang mò...)
                Hãy cứ sống một cách thật tuyệt vời, rồi những điều tốt đẹp sẽ đến với bạn !!

                Comment


                • #9
                  Originally posted by 11520086 View Post
                  t cũng làm y như Quý, khác 1 chỗ là while(count_SNT<n) , khỏi phải break, mệt
                  Mình làm cho người khác hiểu nữa mà, làm cho rõ nghĩa. Cách của Duyệt xa xỉ quá
                  Top Best Online - The Best Products Review Website

                  Comment


                  • #10
                    Originally posted by 12520333 View Post
                    ..............code của anh Thành Trung thì ngắn nhưng khó hỉu đoi chút (đang mò...)
                    =)) gộp nên khó hiểu đó. code mấy sư huynh sử tỉ kia là ghi rời ra.:dreaming: code a.thành là i là số chạy kiểm tra số đó phải ko(SNT)! còn c là biến đếm
                    Delete:brick::brick:

                    Comment


                    • #11
                      Originally posted by 10520303 View Post
                      Đây là code đầy đủ tự tối ưu code lại nhé...
                      Code:
                      #include <stdio.h>
                      #include <conio.h>
                      
                      int Ngto(int n)
                      {
                      	int i;
                      	for(i=2;i<n;i++)
                      	{
                      		if(n%i==0)
                      		{
                      			break;
                      		}
                      	}
                      	if(i==n)
                      		return 1;
                      	return 0;
                      }
                      
                      void main()
                      {
                      	int n;
                      	printf("\n n = ");scanf("%d",&n);
                      	int dem = n;
                      	for(int i=2;i<100;i++)
                      	{
                      		if(Ngto(i))
                      		{
                      			printf("%4d",i);
                      			dem--;
                      		}
                      		if(dem==0)
                      			break;
                      	}
                      	getch();
                      }
                      cho em hỏi cái chỗ return 1 và return 0 nó là như thế nào, em chưa hiểu rõ về return lắm.. may anh giai thich dùm em với ( hình như return 1 là khi lệnh đúng phải ko ạ) Thank !!
                      Hãy cứ sống một cách thật tuyệt vời, rồi những điều tốt đẹp sẽ đến với bạn !!

                      Comment


                      • #12
                        :unhappy:
                        Code:
                        #include "iostream"
                        using namespace std;
                        
                        int checknt(int x)
                        {
                        	int k=0;
                        	if(x<2) return 0;
                        	else
                        		for(int i=2;i<=sqrtf(x);i++)
                        			if(x%i==0)
                        				k++;
                        	if(k==0)
                        		return 1;
                        	return 0;
                        }
                        
                        void main()
                        {
                        	int n,a=0;
                        	cout<<"Nhap n: ";cin>>n;
                        	for(int i=2;a<n;++i)
                        		if(checknt(i)==1)
                        			{
                        				a++;//điều kiện dừng
                        				cout<<i<<" ";
                        		}
                        	system("pause");
                        }
                        http://ns3.upanh.com/b3.s11.d1/6e968...j3p8.gif<br />

                        Comment


                        • #13
                          Trong 1 điều kiện if thì:
                          Code:
                          if(xzy)
                          		return 1;
                          	return 0;
                          đồng nghĩa vs
                          Code:
                          if(xyz)
                          		return 1;
                          	else
                          		return 0;
                          viết như vậy khỏi phải viết lại else.....

                          còn return là để trả về giá trị đúng kiểu trả về (int checknt() sẽ trả về kiểu int - bắt buộc phải return ).
                          có hàm ko có kiểu trả về, ngược lại sẽ bắt buộc trả về...

                          return 0; trả về giá trị false
                          return 1; trả về giá trị true....
                          Last edited by 11520009; 24-11-2012, 23:57.
                          http://ns3.upanh.com/b3.s11.d1/6e968...j3p8.gif<br />

                          Comment


                          • #14
                            Originally posted by 11520009 View Post
                            :unhappy:
                            Code:
                            #include "iostream"
                            using namespace std;
                            
                            int checknt(int x)
                            {
                            	int k=0;
                            	if(x<2) return 0;
                            	else
                            		for(int i=2;i<=sqrtf(x);i++)
                            			if(x%i==0)
                            				k++;
                            	if(k==0)
                            		return 1;
                            	return 0;
                            }
                            
                            void main()
                            {
                            	int n,a=0;
                            	cout<<"Nhap n: ";cin>>n;
                            	for(int i=2;a<n;++i)
                            		if(checknt(i)==1)
                            			{
                            				a++;//điều kiện dừng
                            				cout<<i<<" ";
                            		}
                            	system("pause");
                            }
                            cái này C++ mà anh... đang học C nên nhìn hơi trừu tượng @@!
                            Hãy cứ sống một cách thật tuyệt vời, rồi những điều tốt đẹp sẽ đến với bạn !!

                            Comment


                            • #15
                              Originally posted by 11520009 View Post
                              Trong 1 điều kiện if thì:
                              Code:
                              if(xzy)
                              		return 1;
                              	return 0;
                              đồng nghĩa vs
                              Code:
                              if(xyz)
                              		return 1;
                              	else
                              		return 0;
                              viết như vậy khỏi phải viết lại else.....

                              còn return là để trả về giá trị đúng kiểu trả về (int checknt() sẽ trả về kiểu int - bắt buộc phải return ).
                              có hàm ko có kiểu trả về, ngược lại sẽ bắt buộc trả về...

                              return 0; trả về giá trị false
                              return 1; trả về giá trị true....
                              vậy là cái return 0; là của if(i==n) chứ ko phải của int nguyento(int n) hả anh ???
                              Hãy cứ sống một cách thật tuyệt vời, rồi những điều tốt đẹp sẽ đến với bạn !!

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X