【发布时间】:2016-05-20 14:43:43
【问题描述】:
以下代码有效,但对于某些数字,它需要大量时间来判断该数字是否为质数。我该怎么做才能让它更快?代码如下:
using System;
using System.Collections.Generic;
using System.Linq;``
using System.Text;
using System.Threading.Tasks;
namespace Exercise23
{
class Exercise23
{
static void Main(string[] args)
{
long number = long.Parse(Console.ReadLine());
if (IsPrime(number))
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
}
public static bool IsPrime(long number)
{
if (number == 1) return false;
if (number == 2) return true;
//if (number == 6737626471) return true;
if (number % 2 == 0) return false;
for (int i = 3; i < number; i += 2)
{
if (number % i == 0) return false;
}
return true;
}
}
}
【问题讨论】:
-
有些算法只需要很长时间,具体取决于输入,事实就是如此。想想那些计算 pi 的多位数仍然需要很多时间的超级计算机。
-
这是确定素数最慢的算法之一。加快速度的第一步:您只需迭代到
number的平方根(更高的值不能是除数)。 -
@RenéVogt - 较高的值可以是除数 - 但如果有,您将已经找到至少一个其他除数(可以乘以较高的除数以获得原始数字)例如sqrt(10) 是 3.16。你会声称 5 不是 10 的除数吗?
-
@Damien_The_Unbeliever 没错,这就是我的意思 :)
-
如果这段代码按原样工作,并且只是为了让它更快,它不属于 CodeReview 吗?
标签: c#