Trang 2 / 3 FirstFirst 123 LastLast
Hiển thị kết quả từ 11 đến 20 / 28
  1. #11
    Tham gia
    05-08-2010
    Bài viết
    313
    Like
    9
    Thanked 73 Times in 69 Posts
    Quote Được gửi bởi auauau97 View Post
    Thế thì cách làm của bạn như thế nào ?
    Mà n<10 nhé bạn(để bài)
    Theo mình thì nên dùng quay lui để giải bài này.

    Số siêu ngtố có dạng sau a[1]a[2]..a[n]
    Đầu tiên, thử cho a[1] tất cả các giá trị mà nó có thể nhận, rồi thử tiếp đến a[2],.. cho đến a[n]. Làm như vậy nhanh hơn rất nhiều so với cách duyệt của bạn.

    Vd n = 9, pp của bạn sẽ duyệt tất cả các số từ 100000000 -> 999999999, với mỗi số lại phải kt số đó có phải là số nt ko.

    Còn cách của mình sẽ thử cho a[1] các giá trị từ 1 -> 9, nếu nó ko phải số nguyên tố thì ko thử các chữ số tiếp theo nữa, như vậy sẽ loại được rất nhiều số. vd nếu thử a[1]=4 ko phải số ngt, nó sẽ ko xét đến các số có chữ số dầu tiên là 4 (loại được 10000000 số)

  2. #12
    Tham gia
    15-11-2010
    Bài viết
    38
    Like
    0
    Thanked 2 Times in 2 Posts
    bạn ơi! viết code đi

  3. #13
    Tham gia
    25-06-2011
    Location
    Ninh Bình
    Bài viết
    165
    Like
    4
    Thanked 57 Times in 52 Posts
    Quote Được gửi bởi bin yeu View Post
    bạn ơi! viết code đi
    Bên trên có code rồi như bạn. )

  4. #14
    Tham gia
    05-08-2010
    Bài viết
    313
    Like
    9
    Thanked 73 Times in 69 Posts

    Code của bạn đây

    Code:
    uses crt;
    var a: array[1..9] of byte;
        b: longint;
        n: byte;
    procedure Enter;
      begin
           clrscr;
           write(' Nhap n= ');       readln(n);
           b:=0;
           write(' Cac so sieu ngto co ',n,' cso la: ');
      end;
    
    function Ngto(a: longint):boolean;
      var i: longint;
      begin
           i:=2;
           for i:=2 to a div 2 do
               if a mod i = 0 then break;
           if a = 2 then i:=3;
           Ngto:= not (a mod i = 0);
      end;
    
    procedure PrintResult;
      var i: byte;
      begin
           for i:=1 to n do
               write(a[i]);
           write(' ');
      end;
    
    procedure Attempt(k: byte);
      var i: byte;
      begin
           for i:=0 to 9 do
               begin
                    if (i = 0) and (k=1) then continue;
                    b:=b*10+i;
                    a[k]:=i;
                    if Ngto(b) then
                       begin
                            if k = n then PrintResult
                            else Attempt(k+1);
                       end;
                    b:=b div 10;
               end;
      end;
    
    begin
      Enter;
      Attempt(1);
      readln
    end.
    Khi mình chạy với n = 4 thì nó ra nhiều kq hơn so với vd của bạn, ko biết có đúng ko nữa

  5. #15
    Tham gia
    29-05-2011
    Location
    Hà Nội
    Bài viết
    1,826
    Like
    1,420
    Thanked 47 Times in 42 Posts
    Quote Được gửi bởi HGMinh95 View Post
    Code:
    uses crt;
    var a: array[1..9] of byte;
        b: longint;
        n: byte;
    procedure Enter;
      begin
           clrscr;
           write(' Nhap n= ');       readln(n);
           b:=0;
           write(' Cac so sieu ngto co ',n,' cso la: ');
      end;
    
    function Ngto(a: longint):boolean;
      var i: longint;
      begin
           i:=2;
           for i:=2 to a div 2 do
               if a mod i = 0 then break;
           if a = 2 then i:=3;
           Ngto:= not (a mod i = 0);
      end;
    
    procedure PrintResult;
      var i: byte;
      begin
           for i:=1 to n do
               write(a[i]);
           write(' ');
      end;
    
    procedure Attempt(k: byte);
      var i: byte;
      begin
           for i:=0 to 9 do
               begin
                    if (i = 0) and (k=1) then continue;
                    b:=b*10+i;
                    a[k]:=i;
                    if Ngto(b) then
                       begin
                            if k = n then PrintResult
                            else Attempt(k+1);
                       end;
                    b:=b div 10;
               end;
      end;
    
    begin
      Enter;
      Attempt(1);
      readln
    end.
    Khi mình chạy với n = 4 thì nó ra nhiều kq hơn so với vd của bạn, ko biết có đúng ko nữa
    Thế thì lạ nhỉ ?
    Nhưng mà cách của bạn rất hay, thanks bạn nhé !

  6. #16
    Tham gia
    25-06-2011
    Location
    Ninh Bình
    Bài viết
    165
    Like
    4
    Thanked 57 Times in 52 Posts
    Quote Được gửi bởi HGMinh95 View Post
    Code:
    uses crt;
    var a: array[1..9] of byte;
        b: longint;
        n: byte;
    procedure Enter;
      begin
           clrscr;
           write(' Nhap n= ');       readln(n);
           b:=0;
           write(' Cac so sieu ngto co ',n,' cso la: ');
      end;
    
    function Ngto(a: longint):boolean;
      var i: longint;
      begin
           i:=2;
           for i:=2 to a div 2 do
               if a mod i = 0 then break;
           if a = 2 then i:=3;
           Ngto:= not (a mod i = 0);
      end;
    
    procedure PrintResult;
      var i: byte;
      begin
           for i:=1 to n do
               write(a[i]);
           write(' ');
      end;
    
    procedure Attempt(k: byte);
      var i: byte;
      begin
           for i:=0 to 9 do
               begin
                    if (i = 0) and (k=1) then continue;
                    b:=b*10+i;
                    a[k]:=i;
                    if Ngto(b) then
                       begin
                            if k = n then PrintResult
                            else Attempt(k+1);
                       end;
                    b:=b div 10;
               end;
      end;
    
    begin
      Enter;
      Attempt(1);
      readln
    end.
    Khi mình chạy với n = 4 thì nó ra nhiều kq hơn so với vd của bạn, ko biết có đúng ko nữa
    Có thể bạn chưa hiểu đúng đề bài hoặc là mình chưa hiêu đúng đề! :-P Nhưng mà theo mình thì định nghĩa số siêu nguyên tố ""là số mà khi bỏ 1 số tùy ý các chữ số bên phải của nó thì phần còn lại vẫn là 1 số nguyên tố "" nên các số siêu nguyên tố phải >2xyz....(x= y= z= 0)! Mà nếu như theo giả thiết của mình thì các số >=9 chữ số thì không có số siêu nguyên tố!

  7. #17
    Tham gia
    05-08-2010
    Bài viết
    313
    Like
    9
    Thanked 73 Times in 69 Posts
    À, quên mất 1 ko phải số nguyên tố.
    Các bạn tự sửa hàm Ngto hộ mình nhé
    Quote Được gửi bởi haplinhavxt View Post
    Có thể bạn chưa hiểu đúng đề bài hoặc là mình chưa hiêu đúng đề! :-P Nhưng mà theo mình thì định nghĩa số siêu nguyên tố ""là số mà khi bỏ 1 số tùy ý các chữ số bên phải của nó thì phần còn lại vẫn là 1 số nguyên tố "" nên các số siêu nguyên tố phải >2xyz....(x= y= z= 0)! Mà nếu như theo giả thiết của mình thì các số >=9 chữ số thì không có số siêu nguyên tố!
    Làm sao bạn biết các số >=9 csố ko có số siêu nguyên tố vậy??

  8. #18
    Tham gia
    25-06-2011
    Location
    Ninh Bình
    Bài viết
    165
    Like
    4
    Thanked 57 Times in 52 Posts
    Quote Được gửi bởi HGMinh95 View Post
    À, quên mất 1 ko phải số nguyên tố.
    Các bạn tự sửa hàm Ngto hộ mình nhé

    Làm sao bạn biết các số >=9 csố ko có số siêu nguyên tố vậy??
    Thì tớ code đúng bài này rồi mà!

  9. #19
    Tham gia
    12-02-2012
    Bài viết
    20
    Like
    0
    Thanked 0 Times in 0 Posts
    tui lam` theo the' nay` chay rat' lau
    chi? can` n=8 la` du chet' rui`ko can` =10 dau
    theo tui khi duyet, so nao` chan~ thi` loai lun cho nhanh

  10. #20
    Tham gia
    05-08-2010
    Bài viết
    313
    Like
    9
    Thanked 73 Times in 69 Posts
    Quote Được gửi bởi mrjokes View Post
    tui lam` theo the' nay` chay rat' lau
    chi? can` n=8 la` du chet' rui`ko can` =10 dau
    theo tui khi duyet, so nao` chan~ thi` loai lun cho nhanh
    Duyệt như bạn thì bao h mới ra @@

Trang 2 / 3 FirstFirst 123 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • 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
  •