Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 20 kết quả

Đề tài: nhập vào 1 số nguyên rồi in ra tất cả các ước số của số nguyên đó.

  1. #1
    Ngày gia nhập
    10 2010
    Bài viết
    3

    Mặc định nhập vào 1 số nguyên rồi in ra tất cả các ước số của số nguyên đó.

    Tình hình là em mới học C được có mấy ngày nên còn gà lắm.
    Các bác giúp em bài này với:
    Viết chương trình nhập vào 1 số nguyên rồi in ra tất cả các ước số của số nguyên đó.
    (dùng vòng lặp).Thank for help all

  2. #2
    Ngày gia nhập
    12 2009
    Nơi ở
    Hà Nội
    Bài viết
    535

    for (i=0;i<n;i++)
    if (n%i==0) cout<<i;
    cout là in ra đó, trong c là printf thì phải

  3. #3
    Ngày gia nhập
    09 2010
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi iloveit1208 Xem bài viết
    for (i=0;i<n;i++)
    if (n%i==0) cout<<i;
    cout là in ra đó, trong c là printf thì phải
    theo mình nghĩ thì chỉ cần chia đến n/2 thôi thì phải
    nên ct ntn:
    C Code:
    1. printf("nhap so nguyen n");scanf("%d",&n);
    2. for(i=0;i<n/2;i++)
    3.  if(n%i==0)
    4.     for(j=0;j<n/2;j++)
    5.         printf("uoc chung thu %d la %d",j,i);

  4. #4
    Ngày gia nhập
    10 2010
    Bài viết
    3

    mình đã chạy thử rồi nhưng mà chương trình không chạy được, chỉ nhập được số nguyên rồi sau đó không hiện gì thêm cả

  5. #5
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà Nôi
    Bài viết
    431

    Code mới:
    PHP Code:
    #include <stdio.h>
    #include <math.h>
    void main()
    {
      
    int n,nn,i;
      
    printf("Nhap n:");
      
    scanf("%d",&n);
      
    nn=abs(n);
      
    printf("\nCac uoc la: 1 -1 ");
      if (
    nn%2==0)
          for (
    i=2;i<=(int)sqrt(nn);i++)
            if (
    nn%i==0)
              if (
    i*i!=nnprintf(" %d %d %d %d ",i,-1*i,nn/i,-nn/i);
                    else 
    printf(" %d %d ",i,-1*i);
      if (
    nn%2!=0)
          for (
    i=3;i<=(int)sqrt(nn);i=i+2)
            if (
    nn%i==0)
              if (
    i*i!=nnprintf(" %d %d %d %d ",i,-1*i,nn/i,-nn/i);
                  else 
    printf(" %d %d ",i,-1*i);
        
    printf(" %d %d ",nn,-1*nn);


    Đã được chỉnh sửa lần cuối bởi dehin : 05-10-2010 lúc 10:41 AM.

  6. #6
    Ngày gia nhập
    01 2010
    Nơi ở
    до свидания!
    Bài viết
    1,766

    Mặc định nhập vào 1 số nguyên rồi in ra tất cả các ước số của số nguyên đó.

    Nhưng đầu bài có phải là in ra các ước nguyên tố đâu em?? Tuy nhiên hãy làm sao để giải thuật giải quyết chủ đề là O(sqrt(n)). OK?

  7. #7
    Ngày gia nhập
    09 2010
    Nơi ở
    Cầu Giấy - HN
    Bài viết
    20

    Mới học C cái này dễ hiểu nè :
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    void main()
        {
            
    int n;
            
    printf ("Nhap so nguyen : ");
            
    scanf ("%d",&n);
            for (
    int i=1;i<n;i++)
                {
                    if (
    n%i==0)
                    
    printf ("%d\t",i);
                }
            
    getch();
       } 

  8. #8
    Ngày gia nhập
    12 2009
    Nơi ở
    Hà Nội
    Bài viết
    535

    for (int i=1;i<n/2;i++)
    {
    if (n%i==0)
    printf ("%d\t",i);
    }

    Giảm dc 1 nửa vòng lặp

  9. #9
    Ngày gia nhập
    09 2010
    Nơi ở
    Cầu Giấy - HN
    Bài viết
    20

    Trích dẫn Nguyên bản được gửi bởi iloveit1208 Xem bài viết
    for (int i=1;i<n/2;i++)
    {
    if (n%i==0)
    printf ("%d\t",i);
    }

    giảm dc 1 nửa vòng lặp
    vì các ước của nó ko lớn hơn 1 nửa của nó

  10. #10
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà Nôi
    Bài viết
    431

    Trích dẫn Nguyên bản được gửi bởi nhok_+nhj Xem bài viết
    vì các ước của nó ko lớn hơn 1 nửa của nó
    Nhầm ! 1 số bao giờ cũng có ước là 1 và chính nó.
    ( 12 sẽ có 1 ước là 12 > 12/2 đấy bạn ơi)
    Vì vậy muốn làm như bạn thì sau vòng for phải in thêm ra 1 ước nữa là n.

    Nhưng ở đây ta chỉ cân xét đến sqrt(n) thôi
    VD: n=12, phần nguyên sqrt(12)=3
    Các ước là (1 12/1=12) (2 12/2=6 ) (3 12/3=4 )

    Ngoài ra ta có thể xét 2 TH n chẵn thì khi duyệt tăng i++
    Nếu n lẻ thì n sẽ ko có ước chẵn nên khi tăng i ta có thể tăng i=i+2

    Thêm nữa, để tổng quát n nguyên nên sẽ có ước âm, vì vậy ta thay n=abs(n)
    Và khi in ước i ra nhớ in thêm 1 ước là -i thôi

    PHP Code:
    #include <stdio.h>
    #include <math.h>
    void main()
    {
      
    int n,nn,i;
      
    printf("Nhap n:");
      
    scanf("%d",&n);
      
    nn=abs(n);
      
    printf("\nCac uoc la: 1 -1 ");
      if (
    nn%2==0)
          for (
    i=2;i<=(int)sqrt(nn);i++)
            if (
    nn%i==0)
              if (
    i*i!=nnprintf(" %d %d %d %d ",i,-1*i,nn/i,-nn/i);
                    else 
    printf(" %d %d ",i,-1*i);
      if (
    nn%2!=0)
          for (
    i=3;i<=(int)sqrt(nn);i=i+2)
            if (
    nn%i==0)
              if (
    i*i!=nnprintf(" %d %d %d %d ",i,-1*i,nn/i,-nn/i);
                  else 
    printf(" %d %d ",i,-1*i);
        
    printf(" %d %d ",nn,-1*nn);


    Đã được chỉnh sửa lần cuối bởi dehin : 05-10-2010 lúc 10:41 AM.

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

  1. Bài tập C++ Viết chương trình nhập vào một số các số nguyên,ghi các số nguyên này vào một tập tin.
    Gửi bởi anhthy94 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 12-06-2013, 08:38 PM
  2. 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
  3. Trả lời: 4
    Bài viết cuối: 09-02-2012, 10:42 PM
  4. 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
  5. 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

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