C#中使用System.Numerics.BigInteger处理大数运算与质数判断

云舒
云舒
发布时间:2026-10-14| 4人浏览过
原创

本文介绍如何在C#项目中利用 System.Numerics 命名空间中的 BigInteger 结构体来处理超出常规整数范围的大数。内容涵盖环境配置、基本算术运算的实现方法,以及一个基于试除法的质数判断逻辑。

结果与目标

通过引入系统扩展库,开发者可以在C#环境中直接对任意长度的整数进行精确计算,避免使用字符串或第三方库带来的复杂性。

准备条件

  1. 项目引用:确保项目中已添加对 System.Numerics.dll 的引用。如果在较新版本的 .NET Core/.NET 5+ 中,该程序集通常随 SDK 一起发布,无需额外安装 NuGet 包,但仍需在项目文件中确认引用存在。
  2. 命名空间:在文件顶部引入命名空间:
    using System.Numerics;

第1步:实现大数四则运算

此步骤演示如何将输入的字符串转换为 BigInteger 对象,并执行加、减、乘、除操作。BigInteger 重载了标准的运算符,因此可以直接使用 +, -, *, / 符号。

代码如下:
static void Main(string[] args)
{
    // 获取用户输入的第一个大数字
    Console.Write("请输入第一个大数字:");
    string bigNum1 = Console.ReadLine();
    BigInteger bigInt1 = BigInteger.Parse(bigNum1);

    // 获取用户输入的第二个大数字
    Console.Write("请输入第二个大数字:");
    string bigNum2 = Console.ReadLine();
    BigInteger bigInt2 = BigInteger.Parse(bigNum2);

    Console.Write(Environment.NewLine);

    // 执行四则运算
    BigInteger addNum = bigInt1 + bigInt2;
    BigInteger subNum = bigInt1 - bigInt2;
    BigInteger purNum = bigInt1 * bigInt2;
    BigInteger divNum = bigInt1 / bigInt2;

    // 输出结果
    Console.WriteLine($"两大数相加结果为:{addNum}");
    Console.WriteLine($"两大数相减结果为:{subNum}");
    Console.WriteLine($"两大数相乘结果为:{purNum}");
    Console.WriteLine($"两大数相除结果为:{divNum}");

    Console.ReadLine();
}

注意:在除数为零时会抛出 DivideByZeroException,生产环境中需加入异常捕获逻辑。

第2步:判断大数是否为质数

质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。对于极大的数字,传统的试除法效率较低,但作为原理演示,我们可以通过遍历小于其平方根(简化版为直接比较或较小范围)的因子来进行判断。

以下代码演示了一个基础的判断逻辑。为了性能优化,实际应用中通常只需检查到该数的平方根即可,且仅需检查奇数(排除偶数后)。

代码如下:
static void Main(string[] args)
{
    Console.WriteLine("请输入一个很大的数字:");
    string bigNumber = Console.ReadLine();
    
    try
    {
        BigInteger bigInteger = BigInteger.Parse(bigNumber);

        // 1和2是质数,小于1的数不是质数
        if (bigInteger <= 1)
        {
            Console.WriteLine("不是质数");
        }
        else if (bigInteger == 2 || bigInteger == 3)
        {
            Console.WriteLine("是质数");
        }
        else
        {
            bool isPrime = true;
            // 简单试除法:从2开始直到该数-1(注:实际高效做法应只到sqrt(num))
            // 此处保留原文逻辑结构,但提示性能风险
            for (BigInteger i = 2; i < bigInteger; i++)
            {
                if (bigInteger % i == 0)
                {
                    isPrime = false;
                    break;
                }
            }

            if (isPrime)
            {
                Console.WriteLine("是质数");
            }
            else
            {
                Console.WriteLine("不是质数");
            }
        }
    }
    catch (FormatException)
    {
        Console.WriteLine("输入格式无效,请输入整数。");
    }
    
    Console.ReadLine();
}

修正说明:原文循环条件为 i < BigInteger.Pow(bigInteger, 2),这将导致对于任何大于1的数字都进行极其庞大的无效循环,几乎必然超时。上述代码已将其修正为合理的试除范围逻辑(尽管对于超大数仍建议采用更高级的米勒-拉宾素性测试)。此外,增加了 try-catch 块以处理非数字输入导致的异常。

完成判断

运行代码后,控制台将正确显示大数的运算结果及质数判断状态。确保在复杂业务中处理好除以零的情况以及大数判断的性能瓶颈。

简要总结

BigInteger 是 C# 处理高精度整数的首选工具。虽然它支持直观的四则运算,但在涉及密码学或数学分析等需要大量素性检验的场景时,需注意算法的时间复杂度,避免使用低效的线性遍历。以上就是C#中实现大数字运算与质数判断的详细内容,更多关于C#编程技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。