1樓:況從蓉益煦
注意我的注釋(重點解釋while一段)——首先:判斷質數的標準是,某乙個數被2~該數自身平方根(取整數)一各個相除,如果被除盡了,則立即判斷不是質數。否則就是質數。
while
(k<=sqrt(j))
andnot(f)
do判斷k是達到了該數的平方根,因為範圍在2~2~該數自身平方根內;同時判斷這些數字被j除,有沒有除盡(f在這裡是乙個布林型別的判斷符號,預設是沒有除盡,表示還可以繼續迴圈)。
begin
iftrunc(j/k)=j/k
then
f:=true
沒有除盡肯定j/k是有餘數的,trunc是取整數。如果兩者相等,表示沒有餘數(除盡了),那麼顯然這個數字就不是質數了,把f設定成true。那麼not(f),對ture取反就是false,那麼打破迴圈推出,之後的zs:
=not(f);
也就是對識別符號取反——not(true):false,表示不是質數。
else
k:=k+1;
end;
2樓:翠翰學文魁
f是邏輯(布林)變數,其值只有true和false兩個,not()是庫函式,其返回值是函式引數的求反結果,如
not(ture)
=false,not(false)
=true。
function
zs(j:integer):boolean;
//函式zs的形參為整形變數j,返回值ture說明j為質數,false說明j為和數。
vark:integer;
f:boolean;
begin
f:=false;
//假定j為質數
k:=2;
// 從最小質數2開始去除
while
(k<=sqrt(j))
andnot(f)
do//
這句應該這樣的while
((k<=sqrt(j))
andnot(f))
do begin
iftrunc(j/k)=j/k
then
f:=true
//如果j能被k整除,說明j為和數。
else
k:=k+1;
end;
zs:=not(f);
//只要能被任意的k值整除,則f
=ture,not(f)
=false,就是說j為和數,反之,j為質數。
end;
PASCAL問題,Pascal問題
歷年noip。找源程式太容易了吧 pascal問題 第五題 program lsh5 vara,b,n,x,p integer t array 1.100 ofinteger begin readln n fora 1ton div2 1 dobegin x 0 p a forb a 1ton di...
pascal問題,pascal問題
這是第一題 var i,j,a,n,s,t longint begin readln a,n for i 1 to n do begin s 0 for j 0 to i 1 do begin inc s,a round exp j ln 10 end inc t,s end writeln t r...
判斷是否為質數的快速演算法,判斷乙個數是否為素數的演算法
1醉夢紅顏 判斷n是否為質數 bool isprimenumber int n if n 2 0 int sqrtn int sqrt double n bool flag true for int i 3 i sqrtn i 2 return flag 你造一張素數表,假設很大,這個應該是最笨,但...