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 -_-
Bài liên quan
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ứ?