• 締切済み

おしえてください。

paz777の回答

  • paz777
  • ベストアンサー率47% (77/163)
回答No.6

こんにちは。 勝手に解釈しました。 変数[N]により[PERFORM]を抜ける仕様となると[KEISAN2] で[ATAI]が素数であるかどうかは[KOTAE]を判定するしか ないですね。 従って[PERFORM KEISAN2・・・]と[PERFORM KEISAN3・・・]の間 に[IF]文が必要となることは分かりますね? [KEISAN3]では[ATAI]に一番近い素数を求めるようにすれ ば良いのですが、[PERFORM]の入れ子を使う必要があると 思います。([PERFORM]の中に[PERFORM]を入れる) 例えば[ATAI]が10の時を考えましょう。 [KEISAN2]では[N]が[2]の時[AMARI]が[0]になるので、こ の時点で[KEISAN2]は終了します。 同時に[KOTAE]には[素数ではありません]が入ります。 ここまでは良いでしょうか? [KOTAE]が[素数ではありません]の時に[ATAI -1]から [-1]づつ小さくする[PERFORM]文を作ります。 (要は9からスタートして3より小さくなるまで) --------------------------------------------------- PERFORM KEISAN3 VARYING N FROM ATAI - 1 BY - 1 UNTIL N < 3 --------------------------------------------------- 後は[N]が素数か判定する[PERFOM]を作り[N]が素数である 時に[PERFORM KEISAN3]を抜けるようにすれば良いと思い ます。 多分、今回の設問のポイントはここだと思います。 [PERFORM KEISAN3・・・]を前回の設問のように[2]から[+1] づつ大きくすると[ATAI -1]まで必ず素数かどうなのか 判定しないといけないけど[ATAI -1]から[-1]づつ小さく していくと始めに現れた素数が[ATAI]に一番近い素数に なるはずですよ。 ヒントはここまで、出力の仕様が分からないので・・・ 後はご自身でコーディングをしてみて下さい。 (お勉強!お勉強!) 分からなければ補足して下さい。 ここからは蛇足・・・ σ(^^)もprof_usagiさん同様に[N]に値を代入して[PERFORM] を抜けるやり方はあまりお勧めしません。 実務経験上、他人の作ったプログラムで同様のことをしている 時、プログラムが追いにくいからです。 まぁ、今回はスクールなので他人のプログラムを修正するわけ でもないので良いのでしょうが、もし実務で同様の事例が発生 した時は使用しない方が良いですよ。 それと[END-IF][END-PERFORM][SECTION]は使用してはいけない のでしょうか?使えるととっても助かるのですが・・・

関連する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の約数になるとの考えは当っているでしょうか・・? よろしくお願いします。