C 言語の古典的なアルゴリズムの例 5: ゴールドバッハの予想を検証する

ここに画像の説明を挿入

1. 問題の説明

1.1 ゴールドバッハ予想とは

ゴールドバッハは、1742 年にオイラーに宛てた手紙の中で次の予想を提案しました。2 より大きい整数は、3 つの素数の和として書くことができます。しかし、ゴールドバッハ自身はそれを証明できなかったので、有名な数学者であるオイラーに証明を手伝ってもらうように手紙を書きましたが、オイラーは死ぬまで証明できませんでした。「1 も素数である」という慣例は、今日の数学界ではもはや使用されていないため、元の予想の現代的なステートメントは、次のとおりです。5 より大きい整数は、3 つの素数の和として記述できます。(n>5: n が偶数の場合、n=2+(n-2)、n-2 も偶数であり、2 つの素数の和に分解できます。n が奇数の場合、 n=3+(n-3)、n-3 も偶数であり、2 つの素数の和に分解できます) オイラーはまた、彼の返答で別の同等のバージョンを提案しました。つまり、2 より大きい偶数は、 2 つの素数の和として書かれます。今日の一般的な予想ステートメントは、オイラーのバージョンです。「十分に大きな偶数は、素因数が a を超えない数と、素因数が b を超えない数の和として表現できる」という命題は、「a+b」と書きます。1966 年、陳景潤は「1+2」が確立されたことを証明しました。 "。

1.2、準素数とは

  • 半素数とは

2 つの素数の積で得られる自然数
2 つの素数の積で自然数を表現できる場合、この自然数は準素数 (準素数とも呼ばれる) と呼ばれます。二次ほぼ素数)。

  • たとえば、以下の数の一部は準素数です。

4,6,9,10,14,15,21,22,25,26,33,34,35,38,39,46,49,51,55,57,58,62,65,69,74, 77、82、85、86、87、91、93、94、95、106、111、115、118、119、121、122、123、129、133、134、141、142。

1.3. この記事の問題の説明

ゴールドバッハの予想を検証するために、
問題の説明は
次のとおりです。

  1. 十分に大きな偶数は、2 つの素数の和、または素数と準素数の和として表すことができます。
  2. 偶数入力は 6 より大きい偶数です。
  3. 1 から 100 までの数に対するゴールドバッハの予想を検証します。
  4. プログラムは機能モジュール化の考え方を採用しています。

2. アルゴリズム例コンパイル環境

この記事の C 言語のクラシック アルゴリズムの例のコンパイル環境では、統合開発環境: Visual Studio 2019 を使用します。
ここに画像の説明を挿入

ここに画像の説明を挿入

Visual Studio 2019の公式サイトへのリンクは以下の通り

Visual Studio 2019 公式 Web サイトのリンク
ここに画像の説明を挿入

Visual Studio 2019 統合開発環境の特長は、

  1. Visual Studio 2019 は、既定で Live Share コード コラボレーション サービスをインストールします。
  2. ユーザーがコードをすばやく記述できるようにする新しいウェルカム ウィンドウ、改善された検索機能、一般的なパフォーマンスの改善。
  3. Visual Studio IntelliCode AI ヘルプ。
  4. より優れた Python 仮想化と Conda サポート。
  5. また、WinForms や WPF などを含む .NET Core 3.0 プロジェクトのサポート。

3. アルゴリズム例の実装プロセス

3.1、ヘッダーファイルを含む

次のようにヘッダー ファイル コードをインクルードします。

#pragma once

// 包含头文件
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
  • 使用される C 言語ヘッダー ファイルには、最近のものも含まれます。

3.2. 変数の宣言

変数宣言コードは次のとおりです。

int a = 0;
  • 変数 a が宣言されています。
  • 入力変数として使用されます。

3.3. 6 より大きい偶数を入力する

以下に示すように、6 より大きい偶数コードを入力します。

	printf("输入一个大于 6 的偶数:");

    scanf("%d", &a);
    printf("\n");
  • 関連する変数 min、max、row、col、n を宣言します。

3.4. 入力数値に対するゴールドバッハ予想の検証

  • 入力数値に関するゴールドバッハ予想の検証は、関数の形式で記述されます。

入力数値に関するゴールドバッハの予想の検証コードは次のとおりです。

  1. ゴールドバッハの予想を実行する検証関数の宣言。
/// <summary>
/// 对输入的数字进行哥德巴赫猜想的验证
/// </summary>
/// <param name="intNum">输入的数字</param>
/// <returns>blFlag</returns>
static bool ISGDBHArith(int intNum);
  1. ゴールドバッハ予想の検証関数の定義。
/// <summary>
/// 对输入的数字进行哥德巴赫猜想的验证
/// </summary>
/// <param name="intNum">输入的数字</param>
/// <returns>blFlag</returns>
static bool ISGDBHArith(int intNum)
{
    
    
    bool blFlag = false;							    // 标识是否符合哥德巴赫猜想 
    if (intNum % 2 == 0 && intNum > 6)			        // 对要判断的数字进行判断 
    {
    
    
        for (int i = 1; i <= intNum / 2; i++)
        {
    
    
            bool bl1 = IsPrimeNumber(i);			    // 判断i 是否为素数 
            bool bl2 = IsPrimeNumber(intNum - i);		// 判断 intNum-i 是否为素数 

            if (bl1 & bl2)
            {
    
    
                //输出等式 
                printf("%d = %d + %d\n", intNum, i, intNum - i);
                blFlag = true;
                // 符合哥德巴赫猜想 
            }
        }
    }

    return blFlag;							            // 返回bool 型变量 
}
  • 入力数値に関するゴールドバッハの予想を検証します。
  • この関数は、bool 型の変数 blFlag を返します。
    ここに画像の説明を挿入

3.5. 入力数値が素数かどうかを判断します。

  • 入力数値が関数の形式で記述された素数であるかどうかを判別します。

入力数値が素数かどうかを判定します。コードは次のとおりです。

  1. 入力数値が素数かどうかを判定する関数宣言。
/// <summary>
/// 判断输入的数字是否为素数。
/// </summary>
/// <param name="intNum">输入的数字</param>
/// <returns>blFlag</returns>
static bool IsPrimeNumber(int intNum);
  1. 入力数値が素数かどうかを判定する関数定義。
/// <summary>
/// 判断输入的数字是否为素数。
/// </summary>
/// <param name="intNum">输入的数字</param>
/// <returns>blFlag</returns>
static bool IsPrimeNumber(int intNum)
{
    
    
    bool blFlag = true;						    // 标识是否是素数 

    if (intNum == 1 || intNum == 2)				// 判断输入的数字是否是 1 或者 2 
    {
    
    
        blFlag = true;						    // 为bool 类型变量赋值 
    }
    else
    {
    
    
        int sqr = (int)(sqrt((double)intNum));	// 对要判断的数字进行开方运算 

        for (int i = sqr; i >= 2; i--)			// 从开方后的数进行循环 
        {
    
    
            if (intNum % i == 0)				// 对要判断的数字和指定数字进行求余运算 
            {
    
    
                blFlag = false;				    // 如果余数为 0,说明不是素数 
            }
        }
    }

    return blFlag;							    // 返回bool 型变量 
}
  • 入力数値が素数かどうかを判定します。
  • この関数は、bool 型の変数 blFlag を返します。

F5 を押してコンパイルすると、デバッグ結果は次のようになります。

ここに画像の説明を挿入

  • 配列に入力したデータは正しく出力できます。

3.6. 入力数値に対するゴールドバッハ予想の判断

入力数に対するゴールドバッハ予想の判定コードは以下の通り

	if (blFlag)
    {
    
    
        printf("\n%d:能写成两个素数的和,所以其符合哥德巴赫猜想。\n\n", a);
    }
    else
    {
    
    
        printf("\n%d:不能写成两个素数的和,所以其不符合哥德巴赫猜想。\n\n", a);
    }
  • 入力数が 2 つの素数の和として書ける場合、それはゴールドバッハの予想に適合します。
  • 入力数値が 2 つの素数の和として書けない場合、ゴールドバッハの予想は満たされていません。

F5 を押してコンパイルすると、デバッグ結果は次のようになります。

ここに画像の説明を挿入

3.7. 1 から 100 までの数がゴールドバッハの予想に一致するかどうかを判断します。

  • 1から100までの数字がゴールドバッハの予想に合致するかどうかの判定を関数に書きます。

1から100までの数がゴールドバッハの予想に適合するかどうかを判断するコードは次のとおりです。

  1. 1 から 100 までの数がゴールドバッハの予想を満たすかどうかを判断する関数ステートメント。
 /// <summary>
/// 判断数字1-100是否符合哥德巴赫猜想。
/// </summary>
void digitJudge();
  1. 1 から 100 までの数がゴールドバッハ予想の関数定義に適合するかどうかを判断します。
/// <summary>
/// 判断数字1-100是否符合哥德巴赫猜想。
/// </summary>
void digitJudge()
{
    
    

    for (int i = 1; i <= 100; i++)
    {
    
    
        bool blFlag = ISGDBHArith(i);				        // 判断是否符合哥德巴赫猜想 

        if (blFlag)
        {
    
    
            printf("\n%d:能写成两个素数的和,所以其符合哥德巴赫猜想。\n\n", i);
        }
        else
        {
    
    
            printf("\n%d:不能写成两个素数的和,所以其不符合哥德巴赫猜想。\n\n", i);
        }

        printf("\n");
    }
}
  • forループの使い方。
  • 1 から 100 までの数がゴールドバッハの予想に一致するかどうかを判断します。

F5 を押してコンパイルすると、デバッグ結果は次のようになります。

ここに画像の説明を挿入

输入一个大于 6 的偶数:24

24 = 1 + 23
24 = 5 + 19
24 = 7 + 17
24 = 11 + 13

24:能写成两个素数的和,所以其符合哥德巴赫猜想。


1:不能写成两个素数的和,所以其不符合哥德巴赫猜想。



2:不能写成两个素数的和,所以其不符合哥德巴赫猜想。



3:不能写成两个素数的和,所以其不符合哥德巴赫猜想。



4:不能写成两个素数的和,所以其不符合哥德巴赫猜想。



5:不能写成两个素数的和,所以其不符合哥德巴赫猜想。



6:不能写成两个素数的和,所以其不符合哥德巴赫猜想。



7:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


8 = 1 + 7
8 = 3 + 5

8:能写成两个素数的和,所以其符合哥德巴赫猜想。



9:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


10 = 3 + 7
10 = 5 + 5

10:能写成两个素数的和,所以其符合哥德巴赫猜想。



11:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


12 = 1 + 11
12 = 5 + 7

12:能写成两个素数的和,所以其符合哥德巴赫猜想。



13:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


14 = 1 + 13
14 = 3 + 11
14 = 7 + 7

14:能写成两个素数的和,所以其符合哥德巴赫猜想。



15:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


16 = 3 + 13
16 = 5 + 11

16:能写成两个素数的和,所以其符合哥德巴赫猜想。



17:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


18 = 1 + 17
18 = 5 + 13
18 = 7 + 11

18:能写成两个素数的和,所以其符合哥德巴赫猜想。



19:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


20 = 1 + 19
20 = 3 + 17
20 = 7 + 13

20:能写成两个素数的和,所以其符合哥德巴赫猜想。



21:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


22 = 3 + 19
22 = 5 + 17
22 = 11 + 11

22:能写成两个素数的和,所以其符合哥德巴赫猜想。



23:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


24 = 1 + 23
24 = 5 + 19
24 = 7 + 17
24 = 11 + 13

24:能写成两个素数的和,所以其符合哥德巴赫猜想。



25:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


26 = 3 + 23
26 = 7 + 19
26 = 13 + 13

26:能写成两个素数的和,所以其符合哥德巴赫猜想。



27:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


28 = 5 + 23
28 = 11 + 17

28:能写成两个素数的和,所以其符合哥德巴赫猜想。



29:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


30 = 1 + 29
30 = 7 + 23
30 = 11 + 19
30 = 13 + 17

30:能写成两个素数的和,所以其符合哥德巴赫猜想。



31:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


32 = 1 + 31
32 = 3 + 29
32 = 13 + 19

32:能写成两个素数的和,所以其符合哥德巴赫猜想。



33:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


34 = 3 + 31
34 = 5 + 29
34 = 11 + 23
34 = 17 + 17

34:能写成两个素数的和,所以其符合哥德巴赫猜想。



35:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


36 = 5 + 31
36 = 7 + 29
36 = 13 + 23
36 = 17 + 19

36:能写成两个素数的和,所以其符合哥德巴赫猜想。



37:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


38 = 1 + 37
38 = 7 + 31
38 = 19 + 19

38:能写成两个素数的和,所以其符合哥德巴赫猜想。



39:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


40 = 3 + 37
40 = 11 + 29
40 = 17 + 23

40:能写成两个素数的和,所以其符合哥德巴赫猜想。



41:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


42 = 1 + 41
42 = 5 + 37
42 = 11 + 31
42 = 13 + 29
42 = 19 + 23

42:能写成两个素数的和,所以其符合哥德巴赫猜想。



43:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


44 = 1 + 43
44 = 3 + 41
44 = 7 + 37
44 = 13 + 31

44:能写成两个素数的和,所以其符合哥德巴赫猜想。



45:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


46 = 3 + 43
46 = 5 + 41
46 = 17 + 29
46 = 23 + 23

46:能写成两个素数的和,所以其符合哥德巴赫猜想。



47:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


48 = 1 + 47
48 = 5 + 43
48 = 7 + 41
48 = 11 + 37
48 = 17 + 31
48 = 19 + 29

48:能写成两个素数的和,所以其符合哥德巴赫猜想。



49:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


50 = 3 + 47
50 = 7 + 43
50 = 13 + 37
50 = 19 + 31

50:能写成两个素数的和,所以其符合哥德巴赫猜想。



51:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


52 = 5 + 47
52 = 11 + 41
52 = 23 + 29

52:能写成两个素数的和,所以其符合哥德巴赫猜想。



53:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


54 = 1 + 53
54 = 7 + 47
54 = 11 + 43
54 = 13 + 41
54 = 17 + 37
54 = 23 + 31

54:能写成两个素数的和,所以其符合哥德巴赫猜想。



55:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


56 = 3 + 53
56 = 13 + 43
56 = 19 + 37

56:能写成两个素数的和,所以其符合哥德巴赫猜想。



57:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


58 = 5 + 53
58 = 11 + 47
58 = 17 + 41
58 = 29 + 29

58:能写成两个素数的和,所以其符合哥德巴赫猜想。



59:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


60 = 1 + 59
60 = 7 + 53
60 = 13 + 47
60 = 17 + 43
60 = 19 + 41
60 = 23 + 37
60 = 29 + 31

60:能写成两个素数的和,所以其符合哥德巴赫猜想。



61:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


62 = 1 + 61
62 = 3 + 59
62 = 19 + 43
62 = 31 + 31

62:能写成两个素数的和,所以其符合哥德巴赫猜想。



63:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


64 = 3 + 61
64 = 5 + 59
64 = 11 + 53
64 = 17 + 47
64 = 23 + 41

64:能写成两个素数的和,所以其符合哥德巴赫猜想。



65:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


66 = 5 + 61
66 = 7 + 59
66 = 13 + 53
66 = 19 + 47
66 = 23 + 43
66 = 29 + 37

66:能写成两个素数的和,所以其符合哥德巴赫猜想。



67:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


68 = 1 + 67
68 = 7 + 61
68 = 31 + 37

68:能写成两个素数的和,所以其符合哥德巴赫猜想。



69:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


70 = 3 + 67
70 = 11 + 59
70 = 17 + 53
70 = 23 + 47
70 = 29 + 41

70:能写成两个素数的和,所以其符合哥德巴赫猜想。



71:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


72 = 1 + 71
72 = 5 + 67
72 = 11 + 61
72 = 13 + 59
72 = 19 + 53
72 = 29 + 43
72 = 31 + 41

72:能写成两个素数的和,所以其符合哥德巴赫猜想。



73:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


74 = 1 + 73
74 = 3 + 71
74 = 7 + 67
74 = 13 + 61
74 = 31 + 43
74 = 37 + 37

74:能写成两个素数的和,所以其符合哥德巴赫猜想。



75:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


76 = 3 + 73
76 = 5 + 71
76 = 17 + 59
76 = 23 + 53
76 = 29 + 47

76:能写成两个素数的和,所以其符合哥德巴赫猜想。



77:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


78 = 5 + 73
78 = 7 + 71
78 = 11 + 67
78 = 17 + 61
78 = 19 + 59
78 = 31 + 47
78 = 37 + 41

78:能写成两个素数的和,所以其符合哥德巴赫猜想。



79:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


80 = 1 + 79
80 = 7 + 73
80 = 13 + 67
80 = 19 + 61
80 = 37 + 43

80:能写成两个素数的和,所以其符合哥德巴赫猜想。



81:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


82 = 3 + 79
82 = 11 + 71
82 = 23 + 59
82 = 29 + 53
82 = 41 + 41

82:能写成两个素数的和,所以其符合哥德巴赫猜想。



83:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


84 = 1 + 83
84 = 5 + 79
84 = 11 + 73
84 = 13 + 71
84 = 17 + 67
84 = 23 + 61
84 = 31 + 53
84 = 37 + 47
84 = 41 + 43

84:能写成两个素数的和,所以其符合哥德巴赫猜想。



85:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


86 = 3 + 83
86 = 7 + 79
86 = 13 + 73
86 = 19 + 67
86 = 43 + 43

86:能写成两个素数的和,所以其符合哥德巴赫猜想。



87:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


88 = 5 + 83
88 = 17 + 71
88 = 29 + 59
88 = 41 + 47

88:能写成两个素数的和,所以其符合哥德巴赫猜想。



89:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


90 = 1 + 89
90 = 7 + 83
90 = 11 + 79
90 = 17 + 73
90 = 19 + 71
90 = 23 + 67
90 = 29 + 61
90 = 31 + 59
90 = 37 + 53
90 = 43 + 47

90:能写成两个素数的和,所以其符合哥德巴赫猜想。



91:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


92 = 3 + 89
92 = 13 + 79
92 = 19 + 73
92 = 31 + 61

92:能写成两个素数的和,所以其符合哥德巴赫猜想。



93:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


94 = 5 + 89
94 = 11 + 83
94 = 23 + 71
94 = 41 + 53
94 = 47 + 47

94:能写成两个素数的和,所以其符合哥德巴赫猜想。



95:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


96 = 7 + 89
96 = 13 + 83
96 = 17 + 79
96 = 23 + 73
96 = 29 + 67
96 = 37 + 59
96 = 43 + 53

96:能写成两个素数的和,所以其符合哥德巴赫猜想。



97:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


98 = 1 + 97
98 = 19 + 79
98 = 31 + 67
98 = 37 + 61

98:能写成两个素数的和,所以其符合哥德巴赫猜想。



99:不能写成两个素数的和,所以其不符合哥德巴赫猜想。


100 = 3 + 97
100 = 11 + 89
100 = 17 + 83
100 = 29 + 71
100 = 41 + 59
100 = 47 + 53

100:能写成两个素数的和,所以其符合哥德巴赫猜想。


请按任意键继续. . .

4. 古典的なアルゴリズムのサンプル プログラムの完全なコード

古典的なアルゴリズムのサンプル プログラムの完全なコードは次のとおりです。

4.1、main.h ファイル

#pragma once

// 包含头文件
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>

/// <summary>
/// 判断数字1-100是否符合哥德巴赫猜想。
/// </summary>
void digitJudge();

/// <summary>
/// 对输入的数字进行哥德巴赫猜想的验证
/// </summary>
/// <param name="intNum">输入的数字</param>
/// <returns>blFlag</returns>
static bool ISGDBHArith(int intNum);


/// <summary>
/// 判断输入的数字是否为素数。
/// </summary>
/// <param name="intNum">输入的数字</param>
/// <returns>blFlag</returns>
static bool IsPrimeNumber(int intNum);

4.2、main.c ファイル

#define _CRT_SECURE_NO_WARNINGS

#include "Main.h"


/// <summary>
/// 主函数
/// </summary>
/// <returns>返回0</returns>
int main()
{
    
    
    system("color 3E");

    int a = 0;

    printf("输入一个大于 6 的偶数:");

    scanf("%d", &a);
    printf("\n");

    bool blFlag = ISGDBHArith(a);				        // 判断是否符合哥德巴赫猜想 

    if (blFlag)
    {
    
    
        printf("\n%d:能写成两个素数的和,所以其符合哥德巴赫猜想。\n\n", a);
    }
    else
    {
    
    
        printf("\n%d:不能写成两个素数的和,所以其不符合哥德巴赫猜想。\n\n", a);
    }

    digitJudge();

    system("pause");
    return 0;
}

/// <summary>
/// 判断数字1-100是否符合哥德巴赫猜想。
/// </summary>
void digitJudge()
{
    
    

    for (int i = 1; i <= 100; i++)
    {
    
    
        bool blFlag = ISGDBHArith(i);				        // 判断是否符合哥德巴赫猜想 

        if (blFlag)
        {
    
    
            printf("\n%d:能写成两个素数的和,所以其符合哥德巴赫猜想。\n\n", i);
        }
        else
        {
    
    
            printf("\n%d:不能写成两个素数的和,所以其不符合哥德巴赫猜想。\n\n", i);
        }

        printf("\n");
    }
}

/// <summary>
/// 对输入的数字进行哥德巴赫猜想的验证
/// </summary>
/// <param name="intNum">输入的数字</param>
/// <returns>blFlag</returns>
static bool ISGDBHArith(int intNum)
{
    
    
    bool blFlag = false;							    // 标识是否符合哥德巴赫猜想 
    if (intNum % 2 == 0 && intNum > 6)			        // 对要判断的数字进行判断 
    {
    
    
        for (int i = 1; i <= intNum / 2; i++)
        {
    
    
            bool bl1 = IsPrimeNumber(i);			    // 判断i 是否为素数 
            bool bl2 = IsPrimeNumber(intNum - i);		// 判断 intNum-i 是否为素数 

            if (bl1 & bl2)
            {
    
    
                //输出等式 
                printf("%d = %d + %d\n", intNum, i, intNum - i);
                blFlag = true;
                // 符合哥德巴赫猜想 
            }
        }
    }

    return blFlag;							            // 返回bool 型变量 
}


/// <summary>
/// 判断输入的数字是否为素数。
/// </summary>
/// <param name="intNum">输入的数字</param>
/// <returns>blFlag</returns>
static bool IsPrimeNumber(int intNum)
{
    
    
    bool blFlag = true;						    // 标识是否是素数 

    if (intNum == 1 || intNum == 2)				// 判断输入的数字是否是 1 或者 2 
    {
    
    
        blFlag = true;						    // 为bool 类型变量赋值 
    }
    else
    {
    
    
        int sqr = (int)(sqrt((double)intNum));	// 对要判断的数字进行开方运算 

        for (int i = sqr; i >= 2; i--)			// 从开方后的数进行循环 
        {
    
    
            if (intNum % i == 0)				// 对要判断的数字和指定数字进行求余运算 
            {
    
    
                blFlag = false;				    // 如果余数为 0,说明不是素数 
            }
        }
    }

    return blFlag;							    // 返回bool 型变量 
}

V. まとめ

この記事の C 言語の古典的なアルゴリズムの例: 2 次元配列の最大値と最小値を見つける、達成すべき目標は次のとおりです。

  1. 十分に大きな偶数は、2 つの素数の和、または素数と準素数の和として表すことができます。
  2. 偶数入力は 6 より大きい偶数です。
  3. 1 から 100 までの数に対するゴールドバッハの予想を検証します。
  4. プログラムは機能モジュール化の考え方を採用しています。

ここに画像の説明を挿入

記事はここまでです。
この記事の C 言語の古典的なアルゴリズムの例で、Goldbach の予想が検証されることを願っています。
C 言語とアルゴリズムの学習への愛を刺激することができます。

  • あなたのサポートは私の最大の励ましです。

おすすめ

転載: blog.csdn.net/m0_47419053/article/details/126794077