今回はその反省を生かして取り敢えず1行n列でやってしまう.
この場合は例えば
a=1:100;
で[1,2,3,....,100] を生成できるのですっきり書けそう.
1 は省いて, 2 から始まる行列を作り,順番に割っていくことにする.
剰余を与えるのは modulo(n,m).
ということでこんな感じで書いてみた.
m=input('maximam?')//どこまで篩にかけるかを設定
a=2:m;
for i=1:m-2,//割るのは最大数の一個手前まで.
if a(1,i)~=0 then
for j=i+1:m-1,//2から始まるから最大数のindex はm-1.
if modulo(a(1,j),a(1,i))==0 then
a(1,j)=0;
end
end
end
end
a //表示.
index をどこまでたどるかで何回かエラー吐かれたけど
多分もうちゃんと動いてくれてる.
invalid index
というエラーの時はとりあえずその辺りを疑ってみよう.
そのうち双子素数だけ取り出すような仕様をつけてみてもいい.
追記(@23:04 27/11/2011):
一行或いは一列の行列に対しては,添字の片方は省略できる.例えば
a=1:2:10とすると,実行結果は
a=1. 3. 5. 7. 9.となるけれども,ここで a(3) は
ans = 5.として返される.だから冒頭のも a(1,i) とかせずに a(i) で良かったようだ.
No comments:
Post a Comment