2009年1月10日土曜日

値が素数か調べるver2

この前書いたのが手抜きすぎなので
もう少しきちんと書き直してみました
;素数例:2039

d=0
s=""
input d,300,20,0
button "calc",*start
mesbox s,480,400,0
stop

*start
s=""
cls
input d,300,20,0
button "calc",*start


n=0
m=0
l=0
p=0
// 変数flag:素数であるの時1、素数でない時0
flag=0
s=""
// dは2の倍数であるか調べる
// 2は2n+1ではないので
// whileループの中に入れれない
n=d/2
m=d\2
if d!=2{
if m==0{
s+="× "+2+" * "+n+"\n"
flag=1
}else{
p=(n+1)*2
s+="○ "+2+" * "+(n+1)+" = "+p+"\n":
}
}

// 変数tmp:dがtmpの倍数であるか調べる数
// 値は2n+1
tmp=1
tmp+=2
// 変数tmp02:dがtmpの2乗より大きいか調べる数
tmp02=tmp*tmp
n=0
m=0
l=0
p=0

// dがtmpの2乗より大きい限りループ
while tmp02 <=d
n=d/tmp
m=d\tmp
if m==0{
s+="× "+tmp+" * "+n+"\n"
flag=1
}else{
p=(n+1)*tmp
s+="○ "+tmp+" * "+(n+1)+" = "+p+"\n"
}
tmp+=2
tmp02=tmp*tmp
n=0
m=0
l=0
p=0
await 1
wend
// flagの値で分岐して結果を表示
if flag=0{
s+=""+d+"は素数です"
}else{
s+=""+d+"は素数ではありません"
}
mesbox s,480,400,0
stop

0 件のコメント: