Chương Trình Tìm Số Siêu Nguyên Tố Bị Sai - Programming

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

Từ khóa » Thuật Toán Tìm Số Siêu Nguyên Tố Trong Pascal