炉と加熱システム 数値が素数かどうかを確認します。 素数の見つけ方

数値が素数かどうかを確認します。 素数の見つけ方

古代の人々は、他の数字では割り切れない数字があることを知っていました。 素数の並びは次のようになります。

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61 …

これらの数が無限に多く存在することの証明も次のように与えられました。 ユークリッド、紀元前300年に住んでいた人。 同じ年頃、別のギリシャの数学者が、 エラトステネスは、素数を取得するための非常に単純なアルゴリズムを思いつきました。その本質は、表から数値を順番に取り消していくことでした。 残りの何にも割り切れない数字が素数でした。 このアルゴリズムは「エラトステネスの篩」と呼ばれ、その単純さ(乗算や除算はなく、加算のみ)であるため、 コンピューターテクノロジーまだ。

どうやら、エラトステネスの時代には、数値が素数かどうかについての明確な基準がないことが明らかになっていました - これは実験的にのみ検証できます。 存在する さまざまな方法プロセスを簡素化するため (たとえば、数値が偶数であるべきではないことは明らかです) ですが、単純な検証アルゴリズムはまだ見つかっておらず、おそらく見つからないでしょう。つまり、数値が素数かどうかを確認するため、それをより小さな数に分割するように努める必要があります。

彼らは従いますか 素数何か法律はありますか? はい、彼らはとても好奇心が強いです。

たとえば、フランスの数学者は、 メルセンヌ 16 世紀に彼は、多くの素数が 2^N - 1 の形式を持つことを発見しました。これらの数はメルセンヌ数と呼ばれます。 これより少し前の 1588 年に、イタリアの数学者は カタルディ素数 2 19 - 1 = 524287 (メルセン分類によれば、M19 と呼ばれます) を発見しました。 今ではこの数字は非常に短いように思えますが、今でも計算機を使ってその単純さをチェックするには何日もかかりますが、16世紀にとっては本当に大変な仕事でした。

200年後の数学者 オイラー別の素数 2 31 - 1 = 2147483647 を見つけました。ここでも、必要な計算量は誰もが自分で想像できます。 彼はまた、仮説 (後に「オイラー問題」または「二値ゴールドバッハ問題」と呼ばれる) を提案しました。その本質は単純です。2 より大きいすべての偶数は、2 つの素数の合計として表すことができます。

たとえば、123456 と 888777888 の 2 つの偶数を使用できます。

コンピューターを使用すると、これらの合計を 2 つの素数の形式で見つけることができます: 123456 = 61813 + 61643 および 888777888 = 444388979 + 444388909。 ここで興味深いのは、この定理の正確な証明はまだ見つかっていないことです。コンピューターの助けを借りて、18 個のゼロを含む数字まで検証されています。

別の数学者の定理があります ピエール・フェルマー, 1640 年に発見されたもので、素数が 4*k+1 の形式であれば、他の数の二乗の和として表すことができるというものです。 たとえば、この例では、素数 444388909 = 4*111097227 + 1 です。実際、コンピューターを使用すると、444388909 = 19197*19197 + 8710*8710 であることがわかります。

この定理はわずか 100 年後にオイラーによって証明されました。

そして最後に ベルンハルト・リーマン 1859年、素数の分布数が一定数を超えないことについて、いわゆる「リーマン仮説」が提唱されました。 この仮説はまだ証明されていません。7 つの「ミレニアム問題」のリストに含まれており、ケンブリッジのクレイ数学研究所はそれぞれの解決策に対して 100 万米ドルの賞金を支払う用意があります。

したがって、素数の場合はそれほど単純ではありません。 もあります 驚くべき事実。 たとえば、1883年にロシアの数学者は、 彼ら。 ペルブシンペルミ地方からの数 2 61 - 1 = の素数を証明しました。 2305843009213693951 。 今でも家庭用の電卓ではこれほど長い数字を扱うことはできませんが、当時は本当に大仕事で、どのようにして計算されたのかは今でもあまり明らかではありません。 ユニークな脳能力を持った人は実際にもいますが、たとえば、自閉症の人は頭の中で 8 桁の素数を見つけることができる (!) ことが知られています。 彼らがこれをどのように行うのかは不明です。

現代性

素数は今日でも意味があるのでしょうか? そしてどうやって! 素数は現代の暗号学の基礎であるため、ほとんどの人が意識することなく毎日使用しています。 ネットワーク上での電話の登録、銀行での支払いなど、あらゆる認証プロセスには暗号アルゴリズムが必要です。

ここでのアイデアの本質は非常にシンプルで、アルゴリズムの中心にあります。 RSA、1975年に提案されました。 送信者と受信者は共同でいわゆる「秘密キー」を選択し、安全な場所に保管します。 読者の皆さんはすでにご想像のとおり、このキーは素数です。 2 番目の部分は「公開鍵」で、これも単純な数字で、送信者によって生成され、平文でメッセージとともに作品として送信され、新聞に掲載されることもあります。 このアルゴリズムの本質は、「閉じた部分」を知らなければ原文を取得することが不可能であるということです。

たとえば、2 つの素数 444388979 と 444388909 を使用すると、「秘密鍵」は 444388979 となり、積 197481533549433911 (444388979*444388909) が公的に送信されます。 自分の残りの半分を知っていなければ、不足している数字を計算し、それを使ってテキストを解読することができます。

ここでのトリックは何ですか? 重要なのは、2 つの素数の積を計算するのは難しくありませんが、逆演算は存在しないということです。最初の部分が分からない場合、そのような手順は総当たりでしか実行できません。 また、非常に大きな素数 (たとえば、2000 文字長) を使用する場合、その積をデコードするには、たとえ 1 つの素数であっても数年かかります。 現代のコンピューター(その時までに、メッセージは長い間無関係になっているでしょう)。

このスキームの優れた点は、アルゴリズム自体に秘密がないことです。アルゴリズムはオープンであり、すべてのデータが表面にあります (アルゴリズムと大きな素数のテーブルの両方が既知です)。 暗号そのものとともに、 公開鍵どのような方法でも、どのような方法でも伝達できます オープンフォーム。 しかし、送信者が選択した鍵の秘密部分が分からなければ、暗号化されたテキストを受け取ることはできません。 たとえば、RSA アルゴリズムの説明が 1977 年に雑誌に掲載され、そこで暗号の例も示されたと言えます。 1993 年になって初めて、600 人のボランティアのコンピュータ上の分散コンピューティングの助けを借りて、正しい答えが得られました。

したがって、素数はまったく単純ではないことが判明し、その話は明らかにそこで終わりません。

自然数、有理数、有理数、整数と分数、正と負、複素数と素数、奇数と偶数、実数など、数には違いがあります。この記事から、素数とは何かを知ることができます。

英語で「単純」と言う数字は何ですか?

多くの場合、小学生は、素数とは何かという数学の最も単純な質問の 1 つを一見すると答える方法を知りません。 彼らは、素数を自然数 (つまり、人々が物体を数えるときに使用する数字ですが、一部の資料ではゼロから始まり、他の資料では 1 で始まります) と混同することがよくあります。 しかし、これらはまったく異なる概念です。 素数は自然数、つまり 1 より大きく、自然約数が 2 つしかない整数および正の数です。 さらに、これらの約数の 1 つは指定された数であり、2 番目は 1 です。 たとえば、3 は、それ自体と 1 以外の数で余りを持たずに割り算できないため、素数です。

合成数

素数の反対は合成数です。 それらも自然であり、1つよりも大きいですが、2つではありませんが、 大量仕切り。 したがって、たとえば、4、6、8、9 などの数字は自然な合成数ですが、素数ではありません。 ご覧のとおり、これらはほとんどが偶数ですが、すべてではありません。 しかし、「2」は偶数であり、一連の素数の「最初の数」です。

後続

一連の素数を構成するには、すべての素数から選択する必要があります。 自然数それらの定義を考慮に入れると、矛盾に従って行動する必要があります。 それぞれの正の自然数を調べて、3 つ以上の約数があるかどうかを確認する必要があります。 素数からなる系列(数列)を構築してみましょう。 リストは 2 で始まり、次に 3 が続きます。これは、それ自体と 1 でしか割り切れないためです。 4 という数字を考えてみましょう。 4と1以外の約数はありますか? はい、その数は 2 です。つまり、4 は素数ではありません。 5 も素数 (1 と 5 を除く他の数では割り切れない) ですが、6 は割り切れます。 そして一般に、すべての偶数をたどってみると、「2」を除いて、どれも素数ではないことがわかります。 このことから、2 を除く偶数は素数ではないという結論になります。 もう一つの発見: 3 で割り切れるすべての数は、偶数か奇数かにかかわらず、3 そのものを除き、素数でもありません (6、9、12、15、18、21、24、27 など)。 5 と 7 で割り切れる数についても同様です。 彼らの数もすべて単純ではありません。 要約しましょう。 それで、簡単なものに 一桁の数字 1 と 9 を除くすべての奇数が含まれ、「2」も偶数です。 10 の位自体 (10、20、... 40 など) は単純ではありません。 2 桁、3 桁などの素数は、自分と 1 以外に約数がない場合、上記の原則に基づいて決定できます。

素数の性質に関する理論

素数を含む整数の性質を研究する科学があります。 これは高等数学と呼ばれる分野です。 整数の性質に加えて、代数数や超越数、さらにはこれらの数の算術に関連するさまざまな起源の関数も扱います。 これらの研究では、初歩的および 代数的手法、分析的および幾何学的なものも使用されます。 具体的には、「整数論」は素数の研究を扱います。

素数は自然数の「構成要素」です

算数には基本定理と呼ばれる定理があります。 それによると、1を除く自然数は積で表すことができ、その約数は素数であり、約数の順序は一意であるため、表現方法も一意であるとされています。 自然数を素因数分解することを素因数分解といいます。 このプロセスには別の名前があり、それは数値の因数分解です。 これに基づいて、素数は「 建材」、自然数を構成するための「ブロック」。

素数を検索します。 単純さのテスト

さまざまな時代の多くの科学者が、素数のリストを見つけるためのいくつかの原理 (システム) を見つけようとしました。 科学では、アトキン篩、サンダーサム篩、エラトステネス篩と呼ばれるシステムが知られています。 ただし、有意な結果は得られず、素数を見つけるために使用します。 簡単なチェック。 数学者もアルゴリズムを作成しました。 これらは通常、素数性テストと呼ばれます。 たとえば、Rabin と Miller によって開発されたテストがあります。 暗号学者によって使用されます。 カヤル・アグラワル・サスケーナテストもあります。 ただし、十分な精度があるにもかかわらず、計算が非常に難しいため、実際の重要性は低くなります。

素数の集合に制限はありますか?

古代ギリシャの科学者ユークリッドは、著書『元素』の中で、素数の集合は無限であると書きました。 彼はこう言いました。「素数には限界があるとちょっと想像してみましょう。 次に、それらを掛け合わせて、積に 1 を加えましょう。 これらから導き出される数字は、 単純なアクション、余りは常に 1 になるため、一連の素数で割ることはできません。 これは、素数のリストにまだ含まれていない他の数があることを意味します。 したがって、私たちの仮定は真実ではなく、このセットに制限を設けることはできません。 ユークリッドの証明のほかに、18 世紀のスイスの数学者レオンハルト オイラーによって与えられた、より現代的な公式があります。 それによると、最初の n 個の数値の和の逆数の和は、n が増加するにつれて無制限に増加します。 そして、素数の分布に関する定理の公式は次のとおりです: (n) は n/ln (n) として増加します。

最大の素数は何ですか?

同じレナード・オイラーも、当時の最大の素数を見つけることができました。 これは 2 31 - 1 = 2147483647 です。ただし、2013 年までに、素数リストの中で最も正確な別の最大値、2 57885161 - 1 が計算されました。これはメルセンヌ数と呼ばれます。 これには約 1,700 万の 10 進数が含まれます。 ご覧のとおり、18 世紀の科学者によって発見された数値はこれよりも数倍小さいです。 オイラーはこの計算を手動で実行しましたが、私たちの現代人はおそらくコンピューターの助けを借りていたため、これは当然のことでした。 さらに、この数字はアメリカの学部の数学学部で得られたものです。 この科学者にちなんで名付けられた数字は、リュック・ルメールの素数性テストに合格します。 しかし、科学はそこで止まりたくありません。 1990 年に米国で設立された電子フロンティア財団 (EFF) は、大きな素数を見つけた場合に金銭的な報酬を提供しています。 そして、2013年までは100万人や1000万人の中から発見した科学者に賞が与えられていたとしたら、 10進数、その後、今日、この数字は1億から10億に達しました。 賞金は15万から25万米ドルです。

特別な素数の名前

特定の科学者によって作成されたアルゴリズムのおかげで発見され、単純性テストに合格した数値は、特別と呼ばれます。 その一部を次に示します。

1.メルセン。

4. カレン。

6. ミルズら。

上記の科学者の名前にちなんで名付けられたこれらの数値の単純さは、次のテストを使用して確立されます。

1.リュック・ルメール。

2.ペピーナ。

3.リーゼル。

4.ビルハート-ルメール-セルフリッジほか。

現代科学はこれにとどまらず、おそらく近い将来、最大の素数を見つけて賞金 25 万ドルを獲得した人々の名前が世界に知られることになるでしょう。

この記事では、素数と合成数の概念について説明します。 このような数値の定義を例とともに示します。 素数の数が無限であることを証明し、エラトステネスの方法を使って素数の表に記録します。 数値が素数なのか合成なのかを判断する証拠が与えられます。

Yandex.RTB R-A-339285-1

素数と合成数 - 定義と例

素数と合成数は正の整数として分類されます。 それらは 1 より大きくなければなりません。 約数も単純と複合に分けられます。 合成数の概念を理解するには、まず約数と倍数の概念を学ぶ必要があります。

定義 1

素数は 1 より大きく、2 つの正の約数、つまりそれ自身と 1 を持つ整数です。

定義 2

合成数は、1 より大きく、少なくとも 3 つの正の約数を持つ整数です。

1 は素数でも合成数でもありません。 正の約数は 1 つだけなので、他のすべての正の数とは異なります。 すべての正の整数は自然数と呼ばれ、数えることに使用されます。

定義 3

素数は、正の約数を 2 つだけ持つ自然数です。

定義 4

合成数は、2 つ以上の正の約数を持つ自然数です。

1 より大きい数値はすべて素数または合成数のいずれかです。 割り算の性質から、1 と数値 a は常に任意の数値 a の約数になります。つまり、それ自体と 1 で割り切れます。 整数の定義を与えてみましょう。

定義5

素数ではない自然数を合成数といいます。

素数: 2、3、11、17、131、523。 それらはそれ自体と 1 でのみ割り切れます。 合成数: 6、63、121、6697。 つまり、6 は 2 と 3 に分解でき、63 は 1、3、7、9、21、63、121 は 11、11 に分解でき、約数は 1、11、121 になります。 6697 という数字は 37 と 181 に分解されます。 素数と共素数の概念は異なる概念であることに注意してください。

素数を簡単に使用するには、テーブルを使用する必要があります。

自然数は無限に存在するため、既存のすべての自然数を表す表は非現実的です。 数値が 10000 または 1000000000 のサイズに達した場合は、エラトステネスのふるいの使用を検討する必要があります。

最後のステートメントを説明する定理を考えてみましょう。

定理1

1 より大きい自然数の 1 以外の最小の正の約数は素数です。

証拠1

a が 1 より大きい自然数、b が a の 1 以外の最小の約数であると仮定します。 b が素数であることを矛盾法を使って証明する必要があります。

b が合成数であると仮定します。 ここから、b には 1 とも異なり、また b とも異なる約数があることがわかります。 このような約数は b 1 として表されます。 条件1が必要です。< b 1 < b 完成しました。

この条件から、a は b で除算され、b は b で除算される 1 ことがわかります。これは、割り算の概念が次のように表されることを意味します。 a = b qそして b = b 1 · q 1 、ここで a = b 1 · (q 1 · q) 、ここで q と q1は整数です。 整数の乗算の規則によれば、整数の積は a = b 1 · (q 1 · q) の形式の等価性を持つ整数であることがわかります。 b 1 であることがわかります。 は数値 a の約数です。 不平等 1< b 1 < b ないこれは、b が a の 1 以外の最小の正の約数であることが判明したためです。

定理2

素数は無限に存在します。

証拠2

おそらく、有限数の自然数 n をとり、それらを p 1、p 2、…、p n と表します。 示されたものとは異なる素数を見つけるオプションを考えてみましょう。

p 1、p 2、...、p n + 1 に等しい数 p を考慮してみましょう。 これは、p 1、p 2、...、p n の形式の素数に対応する各数値と等しくありません。 数 p は素数です。 その後、定理は証明されたと考えられます。 複合の場合は、p n + 1 という表記をとる必要があります。 そして、約数が p 1、p 2、...、p n のいずれとも一致しないことを示します。

そうでない場合は、積 p 1、p 2、...、p n の割り算特性に基づいて、 , pn + 1 で割り切れることがわかります。 式 p n + 1 に注意してください。 数値 p を除算すると、合計 p 1、p 2、...、p n + 1 と等しくなります。 式 p n + 1 が得られます。 この和の第 2 項 (1 に等しい) を除算する必要がありますが、これは不可能です。

与えられた任意の数の素数の中から任意の素数を見つけることができることがわかります。 素数は無限に存在するということになります。

素数が多いため、表は 100、1000、10000 などの数値に限定されます。

素数のテーブルをコンパイルするときは、このようなタスクでは 2 から 100 までの数値を順番にチェックする必要があることを考慮する必要があります。 除数がない場合はテーブルに記録されますが、複合の場合はテーブルに入力されません。

段階的に見てみましょう。

数字 2 から始める場合、約数は 2 と 1 の 2 つだけなので、テーブルに入力できることになります。 3という数字も同様です。 数値 4 は合成値であり、2 と 2 に分解する必要があります。 数字の 5 は素数であり、テーブルに記録できることを意味します。 これを100番まで繰り返します。

この方法不便で長い。 テーブルを作成することもできますが、費用がかかります たくさんの時間。 割り算基準を使用する必要があります。これにより、約数を見つけるプロセスが高速化されます。

エラトステネスのふるいを使用する方法が最も便利であると考えられています。 以下のテーブルの例を見てみましょう。 まず、2、3、4、…、50という数字を書きます。

ここで、2 の倍数の数字をすべて取り消す必要があります。 連続した取り消し線を実行します。 次のようなテーブルが得られます。

次に、5 の倍数の数字を消していきます。 我々が得る:

7、11 の倍数の数字に取り消し線を付けます。 最終的にテーブルは次のようになります

定理の定式化に移りましょう。

定理3

基数 a の最小の正の約数は、1 とは異なり、a を超えません。ここで、a は指定された数の算術根です。

証拠3

b は合成数 a の最小の約数を表す必要があります。 整数 q があり、a = b · q であり、b ≤ q です。 形式の不平等は容認されません b > q、条件に違反しているからです。 不等式 b ≤ q の両辺には、1 に等しくない任意の正の数 b を乗算する必要があります。 b · b ≤ b · q (b 2 ≤ a および b ≤ a) が得られます。

証明された定理から、表内の数字を取り消し線で消すと、b 2 に等しく、不等式 b 2 ≤ a を満たす数字から始める必要があるという事実が得られることは明らかです。 つまり、2 の倍数の数値に取り消し線を引くと、プロセスは 4 から始まり、3 の倍数は 9 というように 100 になるまで続きます。

エラトステネスの定理を使用してこのような表を作成すると、すべての合成数を取り消しても、n を超えない素数が残ることがわかります。 n = 50 の例では、n = 50 になります。 このことから、エラトステネスのふるいは、値が 50 の根の値以下のすべての合成数をふるいにかけることがわかります。 数字の検索は取り消し線を引いて行います。

解く前に、その数が素数か合成数かを調べる必要があります。 可分性の基準がよく使用されます。 以下の例でこれを見てみましょう。

例1

数値 898989898989898989 が合成であることを証明します。

解決

指定された数字の桁の合計は 9 8 + 9 9 = 9 17 です。 これは、9 で割り切れるテストに基づいて、9 · 17 という数字が 9 で割り切れることを意味します。 したがって、それは複合であるということになります。

このような記号は数値の素数を証明できません。 検証が必要な場合は、他のアクションを実行する必要があります。 最も適切な方法は、数値を列挙することです。 その過程で、素数と合成数を見つけることができます。 つまり、数値は値が a を超えてはなりません。 つまり、数値 a を素因数分解する必要があります。 これが満たされる場合、数値 a は素数であると考えることができます。

例 2

合成番号または素数 11723 を決定します。

解決

ここで、数値 11723 の約数をすべて見つける必要があります。 11723 を評価する必要があります。

ここから、11723 であることがわかります。< 200 , то 200 2 = 40 000 、11 723< 40 000 . Получаем, что делители для 11 723 少ない数 200 .

数値 11723 をより正確に推定するには、式 108 2 = 11 664 を記述する必要があります。 109 2 = 11 881 、 それ 108 2 < 11 723 < 109 2 。 その結果、11723< 109 . Видно, что любое число, которое меньше 109 считается делителем для заданного числа.

展開すると、2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、 83 、 89 、 97 、 101 、 103 、 107 はすべて素数です。 このプロセス全体は、列による除算として表すことができます。 つまり、11723 を 19 で割ります。 剰余なしの割り算が行われるため、数字 19 はその因数の 1 つです。 部門を列として表してみます。

したがって、11723 は、それ自体と 1 に加えて 19 の約数があるため、合成数であることがわかります。

答え: 11723 は合成数です。

テキスト内のエラーに気付いた場合は、それを強調表示して Ctrl+Enter を押してください。

イリヤの答えは正しいですが、あまり詳しくありません。 ちなみに、18世紀にはまだ1は素数とみなされていました。 たとえば、オイラーやゴールドバッハなどの偉大な数学者です。 ゴールドバッハは、2000 年代の 7 つの問題の 1 つであるゴールドバッハ仮説の著者です。 元の公式では、すべての偶数は 2 つの素数の合計として表すことができると述べています。 さらに、最初は 1 が素数として考慮されており、2 = 1+1 であることがわかります。 これ 最小の例、仮説の元の定式化を満たしています。 その後修正され、文言はこうなりました モダンな外観: 「4 から始まるすべての偶数は、2 つの素数の合計として表すことができます。」

定義を思い出してみましょう。 素数は、p 自体と 1 の 2 つの異なる自然約数のみを持つ自然数 p です。定義からの当然の結果: 素数 p には、p 自体という 1 つの素数しかありません。

ここで、1 が素数であると仮定します。 定義上、素数には素数が 1 つだけあり、それ自体が素数になります。 すると、1 より大きい素数は、それとは異なる素数 (1 で割り切れる) で割り切れることがわかります。 しかし、2 つの異なる素数を互いに割り算することはできません。 そうでない場合、それらは素数ではなく合成数となり、定義に矛盾します。 このアプローチでは、素数は 1 つだけ、つまり単位自体であることがわかります。 しかし、これは不合理です。 したがって、1 は素数ではありません。

1 と 0 は、別の数のクラス、つまり代数分野のサブセットにおける n 項演算に関する中立要素のクラスを形成します。 さらに、加算の演算に関しては、1 は整数の環の生成要素でもあります。

このように考慮すると、他の代数構造で素数の類似物を発見することは難しくありません。 1: 2、4、8、16、... などの 2 の累乗で構成される乗法グループがあるとします。 ここでは 2 が形成要素として機能します。 このグループの素数は、最小の要素より大きく、それ自体と最小の要素でのみ割り切れる数です。 私たちのグループでは、そのような特性を持っているのは 4 つだけです。 私たちのグループにはこれ以上素数はありません。

私たちのグループでも 2 が素数である場合は、最初の段落を参照してください。やはり、2 だけが素数であることがわかります。

問題2.30
自然数で構成される 1 次元配列 A が与えられるとします。 配列内の素数の数を表示します。

まず、素数とは何かを思い出させてください。

では、タスクに移りましょう。 基本的に、素数を決定するプログラムが必要です。 そして、要素を分類してその値を確認するのはテクノロジーの問題です。 同時に、配列の素数を数えるだけでなく表示することもできます。

パスカルで素数を決定する方法

解法アルゴリズム 詳細な分析パスカルであげます。 C++ のサンプル プログラムで解決策を確認できます。

重要!
多くの人が間違える可能性があるのはここです。 定義によれば、素数は スムーズ二つの異なるディバイダー したがって、数値 1 は素数ではありません (ゼロは任意の数で割ることができるため、素数でもありません)。

自分で作成した を使用して、数値が素数であるかどうかを確認します。 この関数は、数値が素数の場合に TRUE を返します。

この関数では、まず数値が 2 未満かどうかを確認します。 もしそうなら、それはもはや素数ではありません。 数値が 2 または 3 の場合、それは明らかに素数であるため、追加のチェックは必要ありません。

ただし、数値 N が 3 より大きい場合、この場合、2 から (N-1) まで、可能なすべての約数を循環します。 数値 N が余りを持たずに何らかの約数で割り切れる場合、それは素数でもありません。 この場合、ループを中断し (これ以上チェックしても意味がないため)、関数は FALSE を返します。

数値がそれ自体で割り切れるかどうかをチェックすることには意味がありません (ループが N-1 までしか続かないのはそのためです)。

関数自体はここでは紹介しません。サンプル プログラムで見てください。

パスカルで問題 2.30 を解く私のタスク; //*********************************************** **************** //定数 //**************************** ********* ************************************ カウント = 100; //配列内の要素の数 //**************************************** *********** *********************** // 関数と手順 //********** *********** ************************************** ** //***** **************************************** * ******** // 数値が素数かどうかをチェックします // 入力: N - 数値 // 出力: TRUE - 数値 N が素数、FALSE - 素数ではありません //********** ***************************************** ****IsPrimeNumber(N:WORD) : ; 変数 i: ; 開始 := TRUE; N of 0..3: 開始 N 終了; 終わり;

終わり; i:= 2 to (N-1) do if (N i) = 0 then //素数ではない begin Result:= FALSE; ; 終わり; 終わり; i: 単語; X: ワード = 0; A: Word の。 //*********************************************** ***************** // メインプログラム //**************************** ***************************************** begin //配列に i:= 1 ~ の数値を入力しますCOUNT do A[i] := i; //配列から素数を数えて選択する for i:= 1 to COUNT do if IsPrimeNumber(A[i]) then begin (X); Write(A[i], " "); 終わり; 名前空間 std を使用します。 //*********************************************** **************** //定数 //**************************** ********* ************************************ const int COUNT = 100; //配列内の要素の数 //**************************************** *********** *********************** // 関数と手順 //********** *********** ************************************** ** //***** **************************************** * ******** // 数値が素数かどうかをチェックします // 入力: N - 数値 // 出力: TRUE - 数値 N が素数、FALSE - 素数ではありません //********** ***************************************** **** bool IsPrimeNumber(int N) ( bool Res = true; switch (N) ( case 0: Res = false; ブレーク; case 1: Res = false; ブレーク; case 2: Res = true; ブレーク; case 3 : Res = true; ブレーク; デフォルト: for (int i = 2; i



サイトの新着情報

>

最も人気のある