• 締切済み

おしえてください。

noname#2099の回答

noname#2099
noname#2099
回答No.3

 では、ご要望にお答えしますね。 PERFOM KEISAN UNTIL  OWARI = "N". DISPLAY SPACE. STOP  RUN. KEISAN. MOVE  SPACE  TO   H-ATAI. ACCEPT H-ATAI AT   0436. MOVE  H-ATAI TO   ATAI. MOVE  1    TO   AMARI. PERFORM KEISAN2 VARYING N   FROM 2 BY 1 UNTIL N > ATAI - 1            OR AMARI = 0. IF   AMARI  =  0  OR     ATAI  <  3     MOVE "素数ではありません" TO KOTAE  ELSE     MOVE "素数です"      TO KOTAE. DISPLAY KOTAE AT 0535. ACCEPT OWARI AT 1045.   KEISAN2. DIVIDE ATAI BY N GIVING HENSU REMAINDER AMARI. 今度は、わかりますよね? 何が違うのか、理解してください。 もちろん、スペースの取り方じゃないですよ。 等幅フォントじゃないと、見にくくなってしまいますね。 --------------------------------------------------  この下は、参考です。理由は、処理系(コンパイラ)に依存するからです。 PERFORM UNTIL  OWARI  =  "N"   MOVE  SPACE  TO   H-ATAI   ACCEPT H-ATAI AT   0436   MOVE  H-ATAI TO   ATAI   MOVE  1    TO   AMARI   PERFORM VARYING N     FROM 2 BY 1 UNTIL N > ATAI - 1             OR AMARI  =  0     DIVIDE ATAI  BY N  GIVING HENSU       REMAINDER  AMARI     END-PERFORM   IF   AMARI  =  0  OR       ATAI  <  3       MOVE "素数ではありません" TO KOTAE    ELSE       MOVE "素数です"      TO KOTAE    END-IF   DISPLAY KOTAE  AT 0535   ACCEPT OWARI  AT 1045   END-PERFORM. DISPLAY SPACE. STOP  RUN. 質問者の使用している処理系の内容がわからないので、この記述方法が使用できるかどうかわかりませんが、書いてみました。  それと、この場を借りまして、 paz777さんへ。  はっきり言って、徹夜明けに返答してますので、知恵が回りません。よって、気にしないです。その証拠に、素数がいくつから始まるのかどうか忘れました。

sukettchi
質問者

お礼

ありがとうございます。みなさんのプログラムを参考にスクールに持っていったので すが答えがあまりにもレベルが高くて先生に「自分でつくったものではないね」 と言われました(笑)。 DISPLAY SPACE. DISPLAY "値を入力" AT 0330. DISPLAY "[ ]" AT 0435. DISPLAY "結果"AT 0630. DISPLAY "続ける=>[ ]"1030. DISPLAY " 続ける…Y 終了…N" AT 1130. PERFOM KEISAN UNTIL OWARI = "N". DISPLAY SPACE. STOP RUN. KEISAN. MOVE SPACE TO H-ATAI. ACCEPT H-ATAI AT 0436. MOVE H-ATAI TO ATAI. PERFORM KEISAN2 VARYING N FROM 2 BY 1 UNTIL N > ATAI - 1. DISPLAY KOTAE AT 0535.     ACCEPT OWARI AT 1045.    KEISAN2.            DIVIDE ATAI BY N GIVING HENSU REMAINDER AMARI. IF AMARI = 0 MOVE "素数ではありません" TO KOTAE MOVE ATAI TO N   <=ここに値を入力することを先生はおしえてくれました。 ELSE           MOVE "素数です"TO KOTAE. この文を使ってもう一つ質問です。 「入力した値が素数ではないとき、入力した一番近い素数を検出」 たとえば10を入れると7、6をいれると5、12をいれると11と言った感じ なのですが、自分の考えではKEISAN2で素数か素数でないかを判定 できたのでPERFORM KEISAN3を作製して PERFORM KEISAN2 VARYING N FROM 2 BY 1 UNTIL N > ATAI - 1. PERFORM KEISAN3 VARYING N FROM 2 BY 1 UNTIL N > ATAI - 1. DISPLAY KOTAE AT 0535.     ACCEPT OWARI AT 1045.    KEISAN2.            DIVIDE ATAI BY N GIVING HENSU REMAINDER AMARI. IF AMARI = 0 MOVE "素数ではありません" TO KOTAE MOVE ATAI TO N    ELSE           MOVE "素数です"TO KOTAE. KEISAN3. DIVIDE ATAI BY GIVING HENSU REMAINDER AMARI. ここから分かりません。素数ではない数、たとえば10を入力して 8や9がKEISAN3にもどって7は10に一番近い素数なので表示したい のですが…。 お願いしますこのプログラム文に付き合ってください

関連するQ&A

  • VBのユーザーフォームでの素数のカウント

    自分でVBのユーザーフォームを使って2から指定の数までの素数がいくつあるかを求めようと思ったのですが、個数の求め方がなかなかうまくいきません。 とりあえず自分ではここまで作ってみたのですが・・・ Private Sub CommandButton2_Click() N = Val(TextBox1) For k = 2 To N kaisuu = 0 For i = 2 To N - 1 amari = N Mod i If amari = 0 Then kaisuu = kaiuu + 1 Next i If kaisuu = 0 Then kosuu = kosuu + 1 If kosuu = 0 Then TextBox3 = "0" Else TextBox3 = kosuu.Val End If Next k End Sub 自分でも探しているのですがなかなか難しいです。 よろしくお願いいたします。

  • JAVAで素数判定

    JAVAの勉強をしてます 練習問題で、素数判定のプログラムをしているのですが。 1~14までの判定はうまくいきますが、15の判定の時に素数であると表示されて困ってます。どなたかわかりませんか? //読み込んだ数字 n が 15 の場合 if(n == 1) System.out.println("素数ではありません。"); if(n == 2) System.out.println("素数です。"); for (int i = 2; i < n; i++) { if (n % i == 0) { System.out.println("素数ではありません。"); break; } else { System.out.println("素数です。"); break; } } --結果---------------------------------------------- 素数です

    • ベストアンサー
    • Java
  • COBOLプログラム2

    このプログラムは売り上げファイルを読み、最初に見出し印刷し、1レコード1行で印刷し、最後に数量、金額の合計を印刷するプログラムです。 どこが間違ってるでしょうか。教えてください。 PROCEDURE__DIVISION. HAJIME. ___OPEN INPUT IN-F OUTPUT OU-F . ___MOVE SHOHIN-CODE TO SHOHIN. ___MOVE SURYOU TO SURYOU. ___MOVE DENPYO-NO TO DENPYO-NO. ___MOVE KINGAKU-W TO KINGAKU. ___WRITE OU-R FROM MIDASHI. NX.__READ IN-F AT END GO TO OWARI. ___MOVE SPACE TO OU-R. ___MOVE CORRESPONDING IN-R TO MEISAI. ___COMPUTER KINGAKU-L=SURYOU OF IN-R*TANKA OF IN-R. ___MOVE KINGAKU-L TO KINGAKU. ___WRITE OU-R FROM MEISAI. ___COMPUTER SURYOU-W=SURYOU-W+SURYOU. ___COMPUTER KINGAKU-W=KINGAKU-W+KINGAKU. ___GO TO NX. OWARI. ___MOVE SURYOU-W TO G-SURYOU. ___MOVE KINGAKU-W TO G-KINGAKU. ___WRITE OU-R FROM GOKEI. ___CLOSE IN-F OU-F. ___STOP RUN.

  • この素数の規則性は既知ですか?

    奇数 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51 奇数のうち素数じゃないものには分かりやすい規則性がある 3^3から始まり3x2間隔 5^5から始まり5x2間隔 7^7から始まり7x2間隔 9^7から始まり9x2間隔 つまりn番目の周期の開始位置が(2n+1)^2で、 間隔が2(2n+1)なのです。 この周期に基づき素数判定プログラムを書いてみましたが、2万くらいまで調べても正しく動作しました。 (信頼されている素数判定プログラムと同じ結果を返しました) この規則性は既知でしょうか? 3以上の素数は全て奇数ですから、 奇数のうちの素数じゃないものに規則があるということは、 素数の規則がわかったと言っても良いと思うのですが、 まあ、もともと素数生成アルゴリズムはたくさんありますね。 数学者が素数について議論していると言われますが数学者が求めている素数の規則性とはどんなものなのでしょうか?

  • 新しい家に引っ越すまで後2週間・・・ 英語で

    「新しい家に引っ越す日まで後2週間ここにいなければいけない。」 を英語に訳したいのですが、これであってますでしょうか。 I must stay at here for just two weeks until the day which I am going to move to new home. 添削よろしくお願いします!!! 新しい家に引っ越すまであと2週間もここに・・というちょっと残念な感じを表現したいのです。 どうぞよろしくお願いいたします。

  • 2から120以下の素数を求める

    2以上120以下の素数を全て求めて表示するプログラムを書きなさい。 素数か否かの判定には以下のアルゴリズム[処理手順] (2 <= n <= 120のときのみ有効)を用いなさい。 i) nが2, 3, 5, 7, 11のうちのどれかと等しければNは素数 ii) nが2, 3, 5, 7, 11の全てに対して割切れなければNは素数 iii) それ以外(iもiiも不成立)のとき、Nは素数ではない。 *) 2, 3, 5, 7, 11は最初に出力してしまい、 n=12から120までをfor文のなかで判定すればよい。 というC言語の課題です。 自分でプログラムを作ったのですが、うまくできません・・。 if文が働いてないようなのですが、どこが間違っているのでしょうか? #include <stdio.h> int main(void) { int i; printf("2\n"); printf("3\n"); printf("5\n"); printf("7\n"); printf("11\n"); for (i=12;i<=120;i++){ if (i%2!=0 || i%3!=0 || i%5!=0 || i%7!=0 || i%11!=0){ printf("%d\n",i); } else{ printf(""); } } printf( "\n" ); return 0; }

  • 1から入力された数までの素因数を数えるプログラム

    こんにちは 1から入力された数(N)までの素因数を数えるプログラムを 作成したいのですが、うまくいきません。 たとえば10と入力すると2と表示されてしまいます。 どこがおかしいのかわかりません。 どなたか教えてください。おねがいします。 N個の配列を用意し、1を入れていき、 素因数でない数の要素には0をいれて、 最終的に1が入っている配列の数を数えて1~Nまでの 素因数の数を数える方法を考えています。 Dim M As Integer Dim N As Integer Dim i As Integer Dim j As Integer Dim sum As Integer Dim L(1000) As Double N = Val(TextBox1) M = N i = 1 Do Until i > N L(i) = 1 i = i + 1 Loop i = 2 Do Until i > M j = i * 2 Do Until j > M L(j) = 0 j = j + 1 Loop i = i + 1 Loop sum = 0 For i = 2 To N If L(i) = 1 Then sum = sum + 1 End If Next i

  • 素数は何%くらいあるか

    高1です。 素数が何%くらいあるかを調べてみようと思い、次のようなBasicプログラムを作りました。 -------------------------------------------------------- 100 cls:count=1:print 2;" ";100;"%";" ";count 110 for i=3 to 10000000 120 n=i 130 if (n - int(n/2)*2) = 0 then goto 220 140 for j = 3 to sqr(n) step 2 150 if (n - j * int(n/j) ) = 0 then goto 220 160 end if 170 next j 180 count=count + 1 190 p = count*100 / (n - 1) 200 percent = (int(p * 10))/10 210 print n;" ";percent;" ";"%";" ";count 220 next i 230 end -------------------------------------------------------- 【各行の意味】 100  2は素数 110  3から一千万まで調べる 130  偶数は除外 140~ 素数判定(自然数nが√n以下のすべての数で割りきれなければ、nは素数である、を利用) 180  素数の個数をカウントする 190~ 素数が何%あるかを少数第一位まで求める。少数第二位以下は切り捨て。 210  素数、%、素数の個数 を表示 -------------------------------------------------------- 【結果】 千までに素数は168個、16.8% 一万までに素数は1229個、12.3% 十万までに素数は9592個、9.5% 百万までに素数は78498個、7.8% 一千万までに素数は664579個、6.6% -------------------------------------------------------- そこで質問ですが、 1.素数の割合は収束する傾向にあると言えるでしょうか? 2.プログラムに間違いがありましたら、教えていただけないでしょうか。 3.素数の割合に関するわかりやすい本(高校生でも理解できるようなもの)などがありましたら、教えていただけないでしょうか。 ちなみに、これは学校の宿題や課題ではありません。純粋に個人的な興味で調べたものですが、何か結論みたいなものが導けたら来年の自由研究に出してみたいと思っています。 使用機種:Mac 使用ソフト:chipmunk basic(フリーソフト) 機種が非力なので1億や10億といった計算はやっていません。

  • COBOL OCCURSで指定したデータの参照の仕方

    IBM COBOL でプログラムを作成しています。 初歩的な質問で恥ずかしいのですが、どなたか教えていただけますか。 まず、以下のようなTABLEを定義しました。 01 A-TABLE. 03 B OCCURS 100. 05 C PIC X(08) VALUE SPACE. 05 D PIC X(02) VALUE SPACE. 05 E PIC X(08) VALUE SPACE. 05 F PIC X(05) VALUE SPACE. 05 G PIC X(05) VALUE SPACE. 05 H PIC X(05) VALUE SPACE. その後に、INPUTファイルからREADしたデータのうち、必要な部分だけを 該当のTABLEに添え字を使用して代入していく処理を作成したいと思っています。 その場合に、上記の「C」~「H」に代入するにはどうすればよいでしょうか? また後続の処理で直接その値を参照したいのですが、どうすれば良いでしょうか? 私の考えられる範囲で以下のようにプログラムしましたが、 実行時に「OUTSIDE THE REGION OF THE TABLE.」というようなエラーが出力されてしまいました。 MOVE I TO C(IDX1) MOVE J TO D(IDX1) MOVE K TO E(IDX1) MOVE L TO F(IDX1) MOVE M TO G(IDX1) MOVE N TO H(IDX1) どなたかよろしくお願いします。

  • 素数の分類と無限性に関して。以前質問させていただいたことの延長になりま

    素数の分類と無限性に関して。以前質問させていただいたことの延長になります。 ※^は乗数の意味です。 8n+1型の素数が無限に存在することの証明 原始根の存在(素数 p を法とする整数環 Z/pZ の乗法群が位数 p - 1 の巡回群であること)を使う。 x を整数とする時x^4 + 1 の奇素数因子を p とする。 x^4 ≡ - 1 (mod. p) より、両辺を2乗することでx^8≡1となる。 x の p を法とする整数環 Z/pZ の乗法群での位数は 8 で有るから、 p ≡ 1 (mod. 8) となる。ここで、 p ≡ 1 (mod. 8) となる素数が有限個であったとする時、その総乗積を P として、 (2P)^4 + 1 の奇素数因子を考えると矛盾が出る。 私は2PをX"とおいて上と同様に考えました。 同じ方法を用いることで証明することはできたのですが、 この証明の中で用いている「位数は 8 で有るから、 p ≡ 1 (mod. 8) となるの部分に関して ラグランジュの定理         位数nの有限郡Gの任意の部分郡Hの位数はGの位数の約数である を用いた場合、GとHに当たる部分はどこになるのでしょうか。今の段階では、nがp-1にあたり、Hの位数が8と考えています。pが素数で、8はp-1の約数になるとの考えは当っているでしょうか・・? よろしくお願いします。