代码未针对大量代码运行(未处理的异常错误)

时间:2020-02-16 00:32:58

标签: c#

下面的代码适用于所述数字(6008514751),但对于所需的最大值:600851475143抛出错误。我使用long类型代替了'int',所以我不明白为什么我的程序不能运行600851475143。非常感谢您的帮助。

引发的错误是: 未处理的异常:
System.OverflowException:算术运算导致溢出。
在<0273ea83c32446be9aa2f9fc5d30dab0>:0
中的HelloWorld.MakeSieve(System.Int64 max)[0x00000]中 在<0273ea83c32446be9aa2f9fc5d30dab0>:0
中的HelloWorld.Main()[0x00000]中 [错误]致命异常:System.OverflowException:算术运算导致溢出。
在<0273ea83c32446be9aa2f9fc5d30dab0>:0
中的HelloWorld.MakeSieve(System.Int64 max)[0x00000]中 在<0273ea83c32446be9aa2f9fc5d30dab0>:0

中的HelloWorld.Main()[0x00000]中

*更新1:有人建议我看看“我在C#中需要很大的数组长度(大小)”。我尝试用double类型替换列表(甚至尝试将所有“ long”替换为“ double”),但无济于事。

更新2:结尾的L(最大值= 600851475143L)没有太大帮助。

谢谢!

using System;
using System.Collections.Generic;

class HelloWorld
{

    public static long Max = 600851475;
    public static List<long> AllPrimesBelowMax = new List<long>();
    public static long maxPrime = 0;

    static void Main()
    {
        MakeSieve(Max);
    }

    private static bool[] MakeSieve(long max)
    {
        bool[] isPrime = new bool[max + 1];
        for (long i = 2; i <= max; i++)
        {
            isPrime[i] = true;
        }

        //cross out multiples
        for (long i = 2; i <= max; i++)
        {
            //check if i is prime
            if (isPrime[i] == true)
            {
                //cross out multiples of i
                for (long j = i * 2; j <= max; j += i)
                {
                    isPrime[j] = false;
                }
            }
        }

        for (long i = 2; i <= max; i++)
        {
            if (isPrime[i] == true)
            {
                AllPrimesBelowMax.Add(i);
            }
        }

        Console.WriteLine(AllPrimesBelowMax[AllPrimesBelowMax.Count - 1]);

        return isPrime;
    }
}

0 个答案:

没有答案
相关问题