C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#哥德巴赫猜想

利用C#验证哥德巴赫猜想的示例代码

作者:wenchm

哥德巴赫猜想(Goldbach’s Conjecture)是数学领域的一个著名猜想,大致内容为任何一个大于2的偶数都可以表示为两个质数之和,下面我们就来看看如何利用C#验证这一猜想呢

1.哥德巴赫猜想

哥德巴赫猜想(Goldbach’s Conjecture)是数学领域的一个著名猜想,由德国数学家克里斯蒂安·哥德巴赫(Christian Goldbach)在1742年提出。这个猜想的内容是:任何一个大于2的偶数都可以表示为两个质数之和。换句话说,哥德巴赫猜想认为,对于任意一个大于2的偶数n,存在两个质数p和q,使得n = p + q。

哥德巴赫猜想的证明对于数学领域具有重要意义。它的证明将有助于揭示质数的分布规律,进一步深化我们对数论的理解。然而,由于哥德巴赫猜想本身的复杂性,目前数学家们还在努力寻找证明它的方法。

2.验证哥德巴赫猜想

虽然哥德巴赫猜想的证明尚未找到,但我们可以通过编程来验证这个猜想。以下是一个C#程序,用于验证哥德巴赫猜想:

// 验证哥德巴赫猜想(Goldbach's Conjecture)
namespace _143
{
    class Program
    {
        #region  判断一个数是否是素数
        /// <summary>
        /// 判断一个数是否是素数
        /// </summary>
        /// <param name="intNum">要判断的数</param>
        /// <returns>如果是,返回true,否则,返回false</returns>
        static bool Prime(int intNum)
        {
            bool blFlag = true;                  //标识是否是素数
            if (intNum == 1 || intNum == 2)      //判断输入的数字是否是1或者2
                blFlag = true;                   //为bool类型变量赋值
            else
            {
                int sqr = Convert.ToInt32(Math.Sqrt(intNum));   
                for (int i = sqr; i >= 2; i--)  //从开方后的数进行循环
                {
                    if (intNum % i == 0)        //对要判断的数字和指定数字进行求余运算
                    {
                        blFlag = false;         //如果余数为0,说明不是素数
                    }
                }
            }
            return blFlag;                      //返回bool型变量
        }
        #endregion
 
        #region 判断一个数是否符合哥德巴赫猜想
        /// <summary>
        /// 判断一个数是否符合哥德巴赫猜想
        /// </summary>
        /// <param name="intNum">要判断的数</param>
        /// <returns>如果符合,返回true,否则,返回false</returns>
        static bool GoldbachConjecture(int intNum)
        {
            bool blFlag = false;                  //标识是否符合哥德巴赫猜想
            if (intNum % 2 == 0 && intNum > 2)    //对要判断的数字进行判断
            {
                for (int i = 1; i <= intNum / 2; i++)
                {
                    bool bl1 = Prime(i);         //判断i是否为素数
                    bool bl2 = Prime(intNum - i);//判断intNum-i是否为素数
                    if (bl1 & bl2)
                    {
                        Console.WriteLine("{0}={1}+{2}", intNum, i, intNum - i);
                        blFlag = true;           //符合哥德巴赫猜想
                    }
                }
            }
            return blFlag;                       //返回bool型变量
        }
        #endregion
 
        static void Main(string[] args)
        {
            if (args is null)
            {
                throw new ArgumentNullException(nameof(args));
            }
 
            Console.WriteLine("输入一个大于2的偶数:");          //提示输入信息
            int intNum = Convert.ToInt32(Console.ReadLine()); //记录输入的数字
            bool blFlag = GoldbachConjecture(intNum);         //判断是否符合哥德巴赫猜想
            if (blFlag)                                       //如果为true,说明符合,并输出信息
            {
                Console.WriteLine("{0}能写成两个素数的和,所以其符合哥德巴赫猜想。", intNum);
            }
            else
            {
                Console.WriteLine("猜想错误。");
            }
            Console.ReadLine();
        }
    }
}

结果:

输入一个大于2的偶数:
6
6=1+5
6=3+3
6能写成两个素数的和,所以其符合哥德巴赫猜想。
 
输入一个大于2的偶数:
100
100=3+97
100=11+89
100=17+83
100=29+71
100=41+59
100=47+53
100能写成两个素数的和,所以其符合哥德巴赫猜想。
 
输入一个大于2的偶数:
98
98=1+97
98=19+79
98=31+67
98=37+61
98能写成两个素数的和,所以其符合哥德巴赫猜想。

3.方法补充

除了上文的代码,小编还为大家大家整理了其他C#验证哥德巴赫猜想的相关代码,希望对大家有所帮助

方法一

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace norm_program
{
   class Program
   {
       static void Main(string[] args)
       {
           int n=0, i=0, j, k, p1, p2;//定义两个素数p1、p2,n为6~100之间能由两个素数表示的偶数;
           for (p1 = 2; p1 < 101; p1++)//依据定义1不是素数,素数p1从2开始;
           {
               for (p2 = 2; p2 < 101; p2++)//素数p2从2开始实现遍历;
               {
                   //由素数定义:素数p仅能被1或其本身整除,即从2开始至根号n中有任一数能将n整除的数都不为素数;
                   k = (int)Math.Sqrt(p2);
                   for (j = 2; j <= k; j++)
                       if (p2 % j == 0)
                           break;
                   if (j > k)//p2为素数,接着判断p1;
                   {
                       k = (int)Math.Sqrt(p1);
                       for (j = 2; j <= k; j++)
                           if (p1 % j == 0)
                               break;
                       if (j > k)//p1、p2都为素数,判断其和是否满足条件;
                       {
                           n = p1 + p2;
                           if (n >= 6 && n <= 100 && n % 2 == 0)
                           {
                            Console.Write("{0}={1}+{2}\t\t", n, p1, p2);
                               i++;  
                               if(i % 5 == 0&&i!=0)//用以计数换行;
                               Console.Write("\n"); 
                           }                          
                       }                                          
                   }
               }
           }
           Console.ReadLine();
       }
   }
}

方法二

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 作业3_2
{
    class Program
    {
        static void Main(string[] args)
        {
            int zhishu(int a)
            {
                int t = 0;
                for (int i = 2; i <= a; i++)
                {
                    if (a % i == 0)
                        t++;
                }
                if (t == 1)
                    return 1;
                else
                    return 0;
            }
            string s = null; int zu = 0;
            for (int a = 6; a < 101;)
            {
                for (int b = 3; b <= a / 2; b++)
                    if (zhishu(b) == 1 && zhishu(a - b) == 1)
                    {
                        s += a.ToString() + "=" + b.ToString() + "+" + (a - b).ToString() + "     ";
                        zu++;
                        if (zu == 5)
                        {
                            Console.Write("{0}\r\n", s);
                            s = null;
                            zu = 0;
                        }
                    }
                a = a + 2;
            }

            Console.ReadLine(); 
        }
    }
}

到此这篇关于利用C#验证哥德巴赫猜想的示例代码的文章就介绍到这了,更多相关C#哥德巴赫猜想内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文