• 締切済み

おしえてください。

cobol言語のスクールにかよっていますがわからないのでおしえてください。 素数判定プログラムなのですが(ある数が割り切れたとき、素数ではない 割り切れなければ素数) 途中から 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. <==ここに1回でも割り切れたとき DISPLAY KOTAE AT 0535.    判定する言語をおしえて ACCEPT OWARI AT 1045.     この文だと全部「素数」と、 KEISAN2.            出てしまうのですが。 DIVIDE ATAI BY N GIVING HENSU REMAINDER AMARI. IF AMARI = 0 MOVE "素数ではありません" TO KOTAE ELSE MOVE "素数です"TO KOTAT. お願いします。

みんなの回答

  • 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]は使用してはいけない のでしょうか?使えるととっても助かるのですが・・・

全文を見る
すると、全ての回答が全文表示されます。
noname#2099
noname#2099
回答No.5

 文章と、コーディングの内容が違うので、どちらに解釈すれば良いのか、教えて下さい。  今のコーディングでは、KEISAN2は意味の無いものになります。必ず、KEISAN3を通りますからね。  本当は、どっち?  それとも、また勝手に解釈して作っても良いのかな?  あと、話は違いますが、あなたの先生の回答に有る、PERFORMの変数に、判定式に引っかかる数を転送して強制的に抜ける方法ですが、処理系によっては、やってはいけない場合がありますので、良い方法ではありません。

全文を見る
すると、全ての回答が全文表示されます。
  • paz777
  • ベストアンサー率47% (77/163)
回答No.4

再登場のpaz777です。 ごめんなさい、とっても不親切でしたね。 お詫びのしるしに1つだけ回答します。 (雛形は#3 prof_usagiさんの回答を参考にしました。) ・新しい変数を使用する方法。 ------------------------------------------------------------ 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  ZERO TO SL. * * [N]が[ATAI]になるか[SL]が[0]になるまで[KEISAN2]を繰り返す。 * PERFORM KEISAN2 VARYING N FROM 2 BY 1 UNTIL N > ATAI - 1 OR         SL = 1. * * 1.[SL]が[1]の時は素数ではない * 2.[SL]が[0]の時は素数 * IF SL = 1 OR ATAI < 2 MOVE "素数ではありません" TO KOTAE ELSE   MOVE "素数です"      TO KOTAE. DISPLAY KOTAE AT 0535. ACCEPT OWARI AT 1045.   KEISAN2. * * [AMARI]が[0]の時は素数ではないのでPERFORMを抜ける * ように[SL]に[1]を入れる * DIVIDE ATAI BY N GIVING HENSU REMAINDER AMARI. IF AMARI = 0 MOVE 1 TO SL ELSE MOVE ZERO TO SL. ------------------------------------------------------------ 机上デバックすると理解できると思います。 例えば[ATAI]が[2]の時[N]は[2]から開始されるので、KEISAN2は実行 されませんよね。そうすると[SL]はZEROのままなので[素数です]と なります。 次に[ATAI]が[3]の時はどうでしょうか。 同じように[N]は[2]から開始されるので、1回目のKEISAN2が実行され ます。[ATAI]が[3]で[N]が[2]である時[AMARI]は[1]なので[SL]には [0]が入ります。PERFORMに戻った時[N]は[3]になるので終わりです。 [SL]は[0]ですので[素数です]となります。 同様に[ATAI]が[4],[5],[6]の場合を確認してみて下さい。 ではでは・・・

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に一番近い素数なので表示したい のですが…。 お願いしますこのプログラム文に付き合ってください

全文を見る
すると、全ての回答が全文表示されます。
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に一番近い素数なので表示したい のですが…。 お願いしますこのプログラム文に付き合ってください

全文を見る
すると、全ての回答が全文表示されます。
  • paz777
  • ベストアンサー率47% (77/163)
回答No.2

こんにちは。 prof_usagiさんの言われている通りPERFORMが最後まで (ATAI - 1)回ってしまいます。 prof_usagiさんの言われている方法以外にも 1.新しい変数を使用する方法 2.変数[N]を流用する方法 3.変数[KOTAE]を判定する方法 など色々とあります。 (prof_usagiさん、気を悪くしないで下さいね。) それと素朴な疑問として、このプログラムでは0436から 取得したデータが0,1,2の時は計算できませんが良いので しょうか? ちょっと気になったので・・・ ではでは・・・

sukettchi
質問者

お礼

paz777さん ありがとうございました。まだスクールに入って日が浅いのでpazさんの 答えがわかりませんでしたがこれから参考にさせていただきます。 プログラムって作成する人によっていろいろ方法がありますね。 また質問の時はアドバイスお願いします。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#2099
noname#2099
回答No.1

 一番最後の行は、たぶんタイプミスだと思いますので、無視するとします。  このフローは、あなたが作成されたのでしょうか?  言語以前に、このフローチャート自体に問題が有ります。それは何かと言うと、必ず、(ATAI - 1)の数になるまでPERFORMの中から抜けられませんね。だから、「素数です」と言う結果が表示されます。  では、ヒント?です。  KEISAN2のPERFORMの前にAMARIにゼロ以外の数を転送し、ATAI - 1の後ろのピリオドを取り、AMARIがゼロかどうか比較し、どちらかの条件を満たしたときに抜けるようにすれば良い訳ですね。  これでできますね。  おまけ。 最後の4行は、この位置でなくても良いのですが、わかりますか?

sukettchi
質問者

お礼

返答ありがとうございます。まだスクールに通って少ししかたっていないので 自分でつくったプログラムです、問題あるみたいですね。 ヒントを読んだんですけどいまいちわかりませんでした。 もう少し分かりやすくおしえてください。 最後の四行はプログラムのながれではどこにあるとよいですか? よろしくおねがいします。

全文を見る
すると、全ての回答が全文表示されます。

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

今週の祝日はある?
このQ&Aのポイント
  • 今週の22日と23日は祝日なのか知りたいです。カレンダーでは赤色になっていないので不安です。
  • 22日と23日に祝日はあるのでしょうか?私のカレンダーでは確認できませんでした。
  • 祝日カレンダーによれば、今週の22日と23日は祝日ですが、私のカレンダーではまだ表示されていません。
回答を見る

専門家に質問してみよう