タイトル | : オリジナルの prime.bas のソース |
投稿日 | : 2024/03/07(木) 22:43 |
投稿者 | : konno | 番 号 | : 11150 11135 番 konno さんへのコメント コメント数 1 |
オリジナルの prime.bas のソースはこれだけです。 INPUT n IF MOD(n,2)=0 THEN IF n=2 THEN PRINT "素数" ELSE PRINT "合成数" ELSE FOR i=3 TO SQR(n) STEP 2 IF MOD(n,i)=0 THEN EXIT FOR NEXT i IF i<=SQR(n) THEN PRINT "合成数" ELSE PRINT "素数" END IF END IF 〜 ELSE 〜 END IF をうまく使ってシンプルでエレガントですね。 TurboBasic で同じやり方はわからなかったので、自分なりに改造したのが以下 FOR i=2 TO n IF i=2 THEN gosub PRINT i;:c=c+1 ' 2 素数 i2=i/2:i3=int(i/2):IF i2=i3 THEN goto EXIT2 ' 合成数 FOR j=3 TO SQR(i) STEP 2 ' 偶数をスキップ i2=i/j:i3=int(i/j):IF i2=i3 THEN goto EXIT1 ' 合成数 NEXT j EXIT1: IF j>SQR(i) THEN gosub PRINT i;:c=c+1 ' 素数 EXIT2: NEXT i:i=i-1 としきさんにループの抜け方が強引と言われたけど、うーむ・・・ IF MOD(n,i)=0 THEN EXIT FOR ここは i2=i/j:i3=int(i/j):IF i2=i3 THEN goto EXIT1 ' 合成数 ↓ i2=i/j:i3=int(i/j):IF i2=i3 THEN i=i+1 ' 合成数 にすればよかったのかな。 つい、EXIT という構文に引っ張られたような・・・(^^;
- No.11150 一括表示へ - コメント元:11135 一括表示へ - [ 返信 ] [引用無し] pre