Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 10 của 10
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Giải thuật:

    // so = số
    // ts = thừa số
    // tsLon = thừa số lớn, tức là số sau khi đã chia cho các thừa số tìm ra.

    1. tsLon = so
    1. Làm một vòng lặp ts=2 đến ts <= tsLon
    2. xét ts nếu là nguyên tố thì :
    2.1. nếu tsLon chia chẵn cho ts thì
    2.1.1. in ra ts // đây là một thừa số nguyên tố
    2.1.2. tsLon = tsLon/ts // chia cho thừa số này để xét chỗ còn lại
    2.1.3. goto 3. // thử lại lần nữa
    3. hết vòng lặp.

    Tính chỉ giải thuật thôi, nhưng code bài này hơi khó:


    Mã:
    int so = 996;int soLon = so;for (int ts = 2; ts <= soLon; ts++){    if (NguyenTo(ts)) // ví dụ đã có hàm xét số nguyên tố    {        while (soLon % ts == 0)        {            printf("%d ", ts);            soLon /= ts;        }    }} // in ra// 2 2 3 83  // chú ý: code này chưa tối ưu hóa// gặp một số nguyên tố lớn, nó chạy từ đầu đến cuối và không biết cách dừng sớm

  2. #2
    Ngày tham gia
    Sep 2015
    Đang ở
    Hà Nội
    Bài viết
    0
    Trích dẫn Gửi bởi hik133
    /*Ham tinh so nguyen to */
    #include<iostream.h>
    #include<conio.h>
    #include<math.h>
    bool LaNguyenTo(int n);
    void main()
    {
    int n;
    cout<<"Nhap vao mot so bat ky: ";cin>>n;
    if(LaNguyenTo(n))
    cout<<"La so nguyen to";
    else
    {
    cout<<"Khong la so nguyen to vi no chia het cho ";
    for(int j=2;j<n;j++)
    {
    if(n%j==0)
    cout<<j<<" va ";
    }
    cout<<"The thoi";
    }
    getch();
    }
    bool LaNguyenTo(int n)
    {
    bool co=true;
    if(n<2)
    {cout<<"Du lieu nhap sai va so do ";
    return !co;}
    else
    {
    for(int i=2;i<=sqrt(n)+1;i++)
    {
    if(n%i==0)
    {
    co=false;
    break;
    }
    }
    }
    return co;
    }




    hàm này em thấy nó sai.các anh chỉ cho em chỗ sai đi.Với lại anh nào giúp em viết 1 chương trình đúng hơn.hàm này chỉ kiểm tra được số nguyen tố thôi ko phân tích ra thừa số nguyen tố .
    Mã:
    /*Phan tich mot so nguyen duong ra thua so nguyen to*/
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    int main()
    {
        int i,n;
        printf("
    Nhap vao mot so nguyen duong:");
        scanf("%d",&n);
        printf("%d=",n);
        for(i=2;i<=n;i++)
        {
                         while(n%i==0)
                         {
                                      if(n==i)
                                      printf("%d",i);
                                      else printf("%d*",i);
                                      n=n/i;
                          
                          }
         
         }
         getch();
    }

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    phân tích 1 số ra thừa số nguyên tố

    1/anh nào giúp em viết 1 chương trình phân tích ra thừa số nguyen tố .

  4. #4
    ^ có vẻ như bạn đang xài Turbo C/C++ với thiệt lập mặc định khi cài đặt.
    Cái tab quá lớn.
    Bạn nên vào option chỉnh lại tab nhỏ nhỏ cho phù hợp.
    Tab là tốt nhưng tab lớn quá thì khó theo dõi cho người viết code cũng như đọc code đó bạn [IMG]images/smilies/biggrin.png[/IMG]

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cái đó cũng đâu có quan trọng! quan trọng là bài viết dễ nhìn thôi mà!

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    #include<iostream.h>
    #include<conio.h>
    #include<stdio.h>
    #include<iomanip.h>
    void main()
    {
    	clrscr();
       int n;
       do
       {
       	cout<<"
    nhap n = ";
          cin>>n;
       }
       while(n==0);
       int i=2;int check=0;
       while(n!=1)
       {
       	if(n%i==0)
          {
          	cout<<i;
             n=n/i;
             if(n==1)
             	check=1;
          	if(check==0)
          		cout<<"*";
          }
          else i++;
       }
       getch();
    }

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nobita_1992
    Mã:
    #include<iostream.h>
    #include<conio.h>
    #include<stdio.h>
    #include<iomanip.h>
    void main()
    {
    	clrscr();
       int n;
       do
       {
       	cout<<"
    nhap n = ";
          cin>>n;
       }
       while(n==0);
       int i=2;int check=0;
       while(n!=1)
       {
       	if(n%i==0)
          {
          	cout<<i;
             n=n/i;
             if(n==1)
             	check=1;
          	if(check==0)
          		cout<<"*";
          }
          else i++;
       }
       getch();
    }
    Bài giải này hay quá, rất dễ hiểu, thanks bạn!!![IMG]images/smilies/clap_grin.gif[/IMG]

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thử vài lần đúng, mọi người kiểm tra giùm
    Mã:
    #include <stdio.h>
    #include <math.h>
    bool nguyento(int n){
    	if(n<2) return false;
    	for(int i=2;i<sqrt(n);i++){
    		if(n%i==0) return false;
    	}
    	return true;
    }
    main(){
    	int n;
    	do{
    		printf("Moi nhap mot so:");
    		scanf("%d",&n);
    	}
    	while(n<2);
    	printf("So %d la tich cua cac so:",n);
    	for(int i=2;i<=n;i++){
    		if(nguyento(i)){
    			if(n%i==0){
    				printf("	%d",i);
    				n=n/i;
    				if(n>1) i=2;
    			}
    		}
    	}
    }

  9. #9
    Ngày tham gia
    Sep 2015
    Đang ở
    Hà Nội
    Bài viết
    0
    ^ Viết vầy là ko đúng [IMG]images/smilies/smile.png[/IMG]

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nhanCNTT
    Bài giải này hay quá, rất dễ hiểu, thanks bạn!!![IMG]images/smilies/clap_grin.gif[/IMG]
    ùi.. bài này hay... khỏi cần kiểm tra số nguyên tố (y)

    - - - Nội dung đã được cập nhật ngày 28-07-2014 lúc 04:05 PM - - -

    Trích dẫn Gửi bởi prog10
    ^ Viết vầy là ko đúng [IMG]images/smilies/smile.png[/IMG]
    kiểm tra đúng mà, chỉ code dở chút thôi.. vừa xem bài của nobita.. code đúng hơn

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •