Follow us on...
Follow us on Twitter Follow us on Facebook Watch us on YouTube

Reviews hay rinh note 4, galaxy V được vi vu Hàn Quốc

Gameshow “Ai Là Triệu Phú” trên VTV đang chờ đón bạn – Tải ngay!

Lời mời tham dự chương trình từ thiện "Giáng Sinh Trong Mắt Em"

Mời offline công nghệ cùng Vn-Zoom tại Hà Nội

Chiêm ngưỡng BaoMoi đẹp "tuyệt diệu" trên Windows Phone

Mời offline công nghệ cùng VN-Zoom tại TP HCM
kết quả từ 1 tới 10 trên 10
  1. #1
    dotaibg's Avatar
    dotaibg vẫn chưa có mặt trong diễn đàn Búa Gỗ Đôi
    Tham gia
    Dec 2011
    Bài
    29
    Cảm ơn
    7
    Điểm: 1/1 bài viết

    Default giúp làm bài siêu nguyên tố bằng trình pascal

    ai cho minh code bài siêu nguyên tố bằng trình pascal

    ---------- Bài thêm lúc 20:46 ---------- Bài trước là lúc 20:45 ----------

    code dùng được với số siêu nguyên tố có 9 chữ số

  2. #2
    phamdoanh's Avatar
    phamdoanh vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Mar 2009
    Bài
    391
    Cảm ơn
    52
    Điểm
    234/115 bài viết

    Default

    Một số gọi là số siêu nguyên tố nếu số đó là số nguyên tố và nếu ta bỏ đi 1 số chữ số ở bên phải của số đó thì số còn lại vẫn là số nguyên tố.

    Ví dụ 233 là số siêu nguyên tố có 3 chữ số vì 233 là số nguyên tố, 23 và 2 cũng là các số nguyên tố. Tương tự số 23 cũng là số siêu nguyên tố có 2 chữ số. Tuy nhiên 2 ko gọi là số siêu nguyên tố.

    Đây là code mình kiếm được
    Code:
    program so_sieu_nguyen_to;
    uses crt;
    var k,n:longint; dem:integer;
    
    procedure nhap;
     begin
      clrscr;
      repeat
      write('nhap n: ');readln(n);
      until (n>=1)and(n<=8);
      k:=0;dem:=0;
     end;
    
    function ktnt(k:longint):boolean;
     var i:longint;
     begin
      ktnt:=true;
      if k<=1 then begin ktnt:=false; exit; end;
      if (k mod 2=0)and(k>2) then begin ktnt:=false; exit; end;
      i:=3;
      while i<=trunc(sqrt(k)) do
      begin
        if k mod i=0 then begin ktnt:=false; exit; end;
        i:=i+2;
      end;
     end;
    
    procedure try(j:integer);
     var l:integer;
     begin
      for l:=1 to 9 do
      begin
        k:=k*10+l;
        if ktnt(k) then
        if j=n then begin inc(dem); writeln('so thu ',dem,': ',k);end
        else try(j+1);
        k:=k div 10;
      end;
     end;
    
    begin
     nhap;
     try(1);
     writeln('Co ',dem,' so sieu nguyen to co ',n,' chu so.');
    readln;
    end


    Giống 1 bài bên projecteuler thì phải

  3. Có 3 thành viên cảm ơn phamdoanh cho bài viết này:
    auauau97 (13-01-2012), ghostmath (12-07-2012), đạo_tặc_bóng_đêm (24-02-2012)

  4. #3
    dotaibg's Avatar
    dotaibg vẫn chưa có mặt trong diễn đàn Búa Gỗ Đôi
    Tham gia
    Dec 2011
    Bài
    29
    Cảm ơn
    7
    Điểm: 1/1 bài viết

    Default

    thanks ban nha

  5. #4
    auauau97's Avatar
    auauau97 vẫn chưa có mặt trong diễn đàn Rìu Chiến Vàng
    Tham gia
    Jun 2010
    Đến từ
    Hà Nội
    Bài
    6.647
    Cảm ơn
    11.934
    Điểm
    5.263/3.016 bài viết

    Default

    cách giải không đệ quy:
    Code:
    Program So_sieu_nguyen_to;
    Uses crt;
    Var
      a,b:array[1..100] of longint;
      n,i,k,ka,kb,cs:byte;
    {------------------------------------------------------------------------}
    Function NT(n:longint):boolean;
    Var
      i:longint;
    Begin
      If (n=0) or (n=1) then
        NT:=False
      Else
        Begin
          i:=2;
          While (n mod i<>0) and (i<=sqrt(n)) do
            i:=i+1;
          If i>sqrt(n) then NT:=True
          Else NT:=False;
        End;
    End;
    {------------------------------------------------------------------------}
    BEGIN
      Clrscr;
      Write('Nhap so n:');
      Readln(n);
      ka:=1;
      a[ka]:=0;
      For i:=1 to n do
        Begin
          kb:=0;
          For k:=1 to ka do
            For cs:=0 to 9 do
              If NT(a[k]*10+cs) then
                Begin
                  kb:=kb+1;
                  b[kb]:=a[k]*10+cs;
                End;
          ka:=kb;
          For k:=1 to ka do
            a[k]:=b[k];
        End;
      For k:=1 to ka do
        Write(a[k]:10);
      Writeln;
      Writeln('Co tat ca ',ka,' so sieu nguyen to co ',n,' chu so.');
      Readln;
    END.

  6. Có 1 thành viên cảm ơn auauau97 cho bài viết này:
    đạo_tặc_bóng_đêm (24-02-2012)

  7. #5
    Tham gia
    Nov 2011
    Đến từ
    FaceBook
    Bài
    338
    Cảm ơn
    90
    Điểm
    133/115 bài viết

    Default

    VN-ZOOM dung la tòan người giỏi mình đã khá rùi lại còn co người giỏi hơn nhất là bạn auauau97 bai nào,ai hỏi cung làm được
    Đúng là nhân tài đâu đâu cũng có

  8. #6
    doanducqui's Avatar
    doanducqui vẫn chưa có mặt trong diễn đàn Gà Con
    Tham gia
    Jul 2011
    Bài
    1
    Cảm ơn
    0
    Điểm: 1/1 bài viết

    Default

    Trích auauau97 View Post
    cách giải không đệ quy:
    Code:
    Program So_sieu_nguyen_to;
    Uses crt;
    Var
      a,b:array[1..100] of longint;
      n,i,k,ka,kb,cs:byte;
    {------------------------------------------------------------------------}
    Function NT(n:longint):boolean;
    Var
      i:longint;
    Begin
      If (n=0) or (n=1) then
        NT:=False
      Else
        Begin
          i:=2;
          While (n mod i<>0) and (i<=sqrt(n)) do
            i:=i+1;
          If i>sqrt(n) then NT:=True
          Else NT:=False;
        End;
    End;
    {------------------------------------------------------------------------}
    BEGIN
      Clrscr;
      Write('Nhap so n:');
      Readln(n);
      ka:=1;
      a[ka]:=0;
      For i:=1 to n do
        Begin
          kb:=0;
          For k:=1 to ka do
            For cs:=0 to 9 do
              If NT(a[k]*10+cs) then
                Begin
                  kb:=kb+1;
                  b[kb]:=a[k]*10+cs;
                End;
          ka:=kb;
          For k:=1 to ka do
            a[k]:=b[k];
        End;
      For k:=1 to ka do
        Write(a[k]:10);
      Writeln;
      Writeln('Co tat ca ',ka,' so sieu nguyen to co ',n,' chu so.');
      Readln;
    END.
    bạn nên sửa lại chút ít để chạy nhanh hơn:
    Program So_sieu_nguyen_to;
    Uses crt;
    Var
    a,b:array[1..100] of longint;
    n,i,k,ka,kb,cs:byte;
    {------------------------------------------------------------------------}
    Function NT(n:longint):boolean;
    Var
    i,t:longint;
    Begin
    If n<2 then
    NT:=False
    Else
    Begin
    i:=2;
    t := trunc(sqrt(n));
    While (n mod i<>0) and (i<=t) do
    i:=i+1;
    If i>t then NT:=True
    Else NT:=False;
    End;
    End;
    {------------------------------------------------------------------------}
    BEGIN
    Clrscr;
    Write('Nhap so n:');
    Readln(n);
    ka:=1;
    a[ka]:=0;
    For i:=1 to n do
    Begin
    kb:=0;
    For k:=1 to ka do
    For cs:=0 to 9 do
    If NT(a[k]*10+cs) then
    Begin
    kb:=kb+1;
    b[kb]:=a[k]*10+cs;
    End;
    ka:=kb;
    For k:=1 to ka do
    a[k]:=b[k];
    End;
    For k:=1 to ka do
    Write(a[k]:10);
    Writeln;
    Writeln('Co tat ca ',ka,' so sieu nguyen to co ',n,' chu so.');
    Readln;
    END.

  9. Có 1 thành viên cảm ơn doanducqui cho bài viết này:
    auauau97 (03-03-2012)

  10. #7
    hungvnonline's Avatar
    hungvnonline vẫn chưa có mặt trong diễn đàn Gà Con
    Tham gia
    Oct 2007
    Bài
    4
    Cảm ơn
    0
    Điểm
    0/0 bài viết

    Default

    các bài ở trên làm tương đối chính xác thôi nếu n >= 9 thì không chính xác nữa rồi.

  11. #8
    kimdongbang's Avatar
    kimdongbang vẫn chưa có mặt trong diễn đàn Búa Gỗ
    Tham gia
    Jan 2012
    Bài
    10
    Cảm ơn
    7
    Điểm
    0/0 bài viết

    Default

    ôi, cảm ơn bạn nhe

  12. #9
    love.angel's Avatar
    love.angel vẫn chưa có mặt trong diễn đàn Búa Gỗ
    Tham gia
    Apr 2012
    Bài
    11
    Cảm ơn
    1
    Điểm: 1/1 bài viết

    Default

    thấy code này ở ddth có rồi...ko biết là bên đấy lấy bên mình hay ngược lại nữa

  13. #10
    hoailam9119's Avatar
    hoailam9119 vẫn chưa có mặt trong diễn đàn Gà Con
    Tham gia
    Sep 2012
    Bài
    8
    Cảm ơn
    28
    Điểm: 3/1 bài viết

    Default

    Vì số lượng số siêu nguyên tố khá là ít (với n = 1 hoặc n >= 9 thì không có số siêu nguyên tố nào):
    n = 2 : 9 số
    n = 3 : 14 số
    n = 4 : 16 số
    n = 5 : 15 số
    n = 6 : 12 số
    n = 7 : 8 số
    n = 8 : 5 số
    Do đó chỉ cần dùng if là đủ.
    Cách này là nhanh nhất đó, chỉ mỗi tội là code hơi lâu

 

 

Quyền sử dụng

  • 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ể tự sửa bài viết của mình
  •