关于一道判断素数的算法的pascal的问题

PROGRAM sushu; VAR a,i:integer; flag:boolean; BEGIN readln(a); flag:=true; FOR i:=2 to trunc(sqrt(a)) do IF a mod i=0 THEN BEGIN flag:=false;BREAK;END; IF flag THEN writeln(‘Y’) ELSE writeln(‘N’); END. 我是pascal白痴,谁能给我解释一下这个程序,我从THEN BEGIN flag:=false;BREAK;END;就看不懂了,break是干嘛的,if flag又是干嘛的,这两个if是怎么回事

第1个回答  2019-04-19
PROGRAM
sushu;
VAR
a,i:integer;
//integer是整型
flag:boolean;
//boolean(布尔型)储存的内容只有两种1、true(正确)2、false(错误)
BEGIN
readln(a);
//读入一个要判断的数
flag:=true;
//一开始先假设这个数是素数,标志为true
FOR
i:=2
to
trunc(sqrt(a))
do
//从2开始(要注意,不能是1,否则有问题)一直到根号a因为如果在根号内的范围内没有这个数的因数的话这个数就是素数
IF
a
mod
i=0
//如果a除以i余数为零(表示在这个范围内有a的因数,他就不是素数)
THEN
BEGIN
flag:=false;BREAK;END;
//begin
end表示前面的if成立就执行这段内容,flag:=false表示把标志记为错误,这个数不是素数,break的作用是退出当前正进行的最小的循环,也就是退出(只要找到一个a的因数就可以确定他不是素数了,不必再往下寻找,break直接到
IF
flag这行程序)
IF
flag
//这句话翻译的意思是:如果flag为“正确”能够这么写的原因是flag是布尔型(只有true/false
两种情况),其实if后面的表达式一定最后都会成为一个true/false的样子(比如1=1为true,1=2为false,当x为20,y为10时x>y为true)
THEN
writeln(‘Y’)
//如果flag为正确,那么输出Y
ELSE
writeln(‘N’);
//如果flag为错误,那么输出N
END.
差不多就这样了,有不懂的再问我【望采纳,谢谢
相似回答