01/10/2018, 14:42

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

đề 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 -_-

HK boy viết 16:52 ngày 01/10/2018

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ứ?

Bài liên quan
0