Chương trình tìm số siêu nguyên tố bị sai

đề bài : cho M (<= 30000), tìm số siêu nguyên tố gần nó nhất (hoặc là chính nó)

  • số siêu nguyên tố : là số nguyên tố mà khi bỏ đi lần lượt một chữ số bên phải thì nó vẫn là số nguyên tố
    vd : 2333 là số nguyên tố, 233 vẫn là nguyên tố, 23 vẫ là nguyên tố mà 2 cũng là nguyên tố

Đây là chương trình em viết

program so_sieu_nguyen_to;
uses crt;
var m : integer;
    so1,so2 : integer;
    
function is_prime(x : integer) : boolean;
 var i : integer;
 begin
     is_prime := true;
     if (x = 1) or (x = 0) then is_prime := false;
     for i:=2 to (x div 2) do
         if (x mod i = 0) then 
             begin
                 is_prime := false;
                 break;
             end;
 end;

function is_super_prime(x : integer) : boolean;
 begin
     is_super_prime := true;
     if (x = 0) then is_super_prime := false
     else
         begin
             while (is_prime(x) = true) and (x <> 0) do 
                 x := x div 10; 
             if (x = 0) then is_super_prime := true
             else is_super_prime := false;   
         end;   
 end;  

procedure tim_so;
 var i : integer;
 begin
     for i := m downto 2 do
         begin
             if (is_super_prime(i) = true) then 
                  begin
                      so1 := i;
                      break;
                  end; 
         end;   
     for i := m+1 to m*2 do
         begin
             if (is_super_prime(i) = true) then
                 begin
                     so2 := i;
                     break;
                 end;
         end;           
 end;

begin
    readln(m);
    tim_so;
    if (so1 = 0) then writeln(so2)
    else if ((so2 - m) < (m - so1)) then 
        writeln(so2)
    else if ((so2 - m) > (m - so1)) then
        writeln(so1)
    else 
        begin
            writeln(so1);
            writeln(so2); 
        end;
end.

chương trình vẫn chạy nhưng ở khoảng m = 70 -> m = 3000 thì nó chỉ trả về 0, em mò mà vẫn không ra, ae giúp em với -_-đề bài : cho M (<= 30000), tìm số siêu nguyên tố gần nó nhất (hoặc là chính nó)

  • số siêu nguyên tố : là số nguyên tố mà khi bỏ đi lần lượt một chữ số bên phải thì nó vẫn là số nguyên tố
    vd : 2333 là số nguyên tố, 233 vẫn là nguyên tố, 23 vẫ là nguyên tố mà 2 cũng là nguyên tố

Đây là chương trình em viết

program so_sieu_nguyen_to;
uses crt;
var m : integer;
    so1,so2 : integer;
    
function is_prime(x : integer) : boolean;
 var i : integer;
 begin
     is_prime := true;
     if (x = 1) or (x = 0) then is_prime := false;
     for i:=2 to (x div 2) do
         if (x mod i = 0) then 
             begin
                 is_prime := false;
                 break;
             end;
 end;

function is_super_prime(x : integer) : boolean;
 begin
     is_super_prime := true;
     if (x = 0) then is_super_prime := false
     else
         begin
             while (is_prime(x) = true) and (x <> 0) do 
                 x := x div 10; 
             if (x = 0) then is_super_prime := true
             else is_super_prime := false;   
         end;   
 end;  

procedure tim_so;
 var i : integer;
 begin
     for i := m downto 2 do
         begin
             if (is_super_prime(i) = true) then 
                  begin
                      so1 := i;
                      break;
                  end; 
         end;   
     for i := m+1 to m*2 do
         begin
             if (is_super_prime(i) = true) then
                 begin
                     so2 := i;
                     break;
                 end;
         end;           
 end;

begin
    readln(m);
    tim_so;
    if (so1 = 0) then writeln(so2)
    else if ((so2 - m) < (m - so1)) then 
        writeln(so2)
    else if ((so2 - m) > (m - so1)) then
        writeln(so1)
    else 
        begin
            writeln(so1);
            writeln(so2); 
        end;
end.

chương trình vẫn chạy nhưng ở khoảng m = 70 -> m = 3000 thì nó chỉ trả về 0, em mò mà vẫn không ra, ae giúp em với -_-

Hàm is_prime thiếu 1 lần return nữa, nếu ở trên x không tìm thấy ước nào thì phải gán 1 lần is_prime := true ở cuối vòng lặp for í chứ?

2 Likes

A post was merged into an existing topic: Topic lưu trữ các post off-topic - version 3

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?