首页 >后端开发 >C++ >为什么我的程序无法在 long 变量中找到素数,如何修复它?

为什么我的程序无法在 long 变量中找到素数,如何修复它?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-13 22:01:46910浏览

Why is my program failing to find prime numbers within a long variable, and how can I fix it?

长变量中素数识别的故障排除

用户报告了在尝试识别长变量中的素数时获取输出的问题。 原始程序包含一个缺陷,无法获得正确的结果。

问题分析

主要错误源于不正确的循环变量初始化。 外循环的条件 (i <= num) 效率低下,可能导致程序无限期运行或产生不正确的结果。

增强代码

下面是一个修改后的程序,可以解决这些问题并有效地找到给定范围内的素数:

<code class="language-csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PrimeNumberFinder
{
    class Program
    {
        static void FindPrimes(long num)
        {
            bool isPrime;
            for (long i = 2; i <= num; i++)
            {
                isPrime = true;
                for (long j = 2; j * j <= i; j++)
                {
                    if (i % j == 0)
                    {
                        isPrime = false;
                        break;
                    }
                }
                if (isPrime)
                {
                    Console.WriteLine(i);
                }
            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Enter a number:");
            long inputNum;
            if (long.TryParse(Console.ReadLine(), out inputNum))
            {
                FindPrimes(inputNum);
            }
            else
            {
                Console.WriteLine("Invalid input. Please enter a valid long integer.");
            }
        }
    }
}</code>

性能增强

这种改进的代码提供了更好的性能,接近 O(n log log n) 时间复杂度,使其适合更大范围的数字。 内循环条件 (j * j <= i) 是一个关键的优化。

以上是为什么我的程序无法在 long 变量中找到素数,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn