判断素数(Pascal)

2024-12-04 09:21:45
推荐回答(3个)
回答1:

由于maxlongint=2147483647,所以这道题不需要进行高精度的运算,判断因子只需要取到根号下(sqrt)并且取整(trunc)就行了,这样可以节省运行时间。我想你一定听过用筛选法求素数,但那样较难理解,需录入的语言较多。不过如果楼主感兴趣还可以了解一下,那种算法会快很多。
var
x,i:longint;
s:boolean;
begin
read(x);
for i:=2 to trunc(sqrt(x)) do
begin
s:=true;
if x mod i=0 then s:=false;
if s then write(x,' is a prime number.')
else write(x,' is not a prime number.');
end
end.

回答2:

var
  x:longint;

function is_prime(x:longint):boolean;
var
  y,i:longint;
begin
  if x<2 then exit(false);
  y:=trunc(sqrt(x));
  for i:=2 to y do
    if x mod i=0 then exit(false);
  exit(true);
end;

begin
  readln(x);
  if is_prime(x) then writeln(x,' is a prime number.')
    else writeln(x,' is not a prime number.');
end.

回答3:

同上,贴伪代码
bj=false;
for i=2 to trunc(sqrt(x))
if x mod 2=0
bj=true; break;

if bj
writeln(x,' is not a prime number')
else writeln(x,' is a prime number');
(省略then、do etc.)
顺带纠正一下豹王LEO的程序 不能在’{}‘中清s 否则会打出多个输出,需加个halt;
To罗马角斗士:其实不需要将1特殊化处理,这样才更普遍性;
不过写的可观 赞~\(≧▽≦)/~