C#找质数(素数)厄拉多塞筛法
质数(prime number)又称素数,有无限个。指整数在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数(除了1和它本身以外不再有其他的因数)。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积,比1大但不是素数的数称为合数。1和0既非素数也非合数。最小的质数是2。
厄拉多塞(Eratosthenes, 公元前276–前196)古希腊天文学家。他是阿基米德的朋友,也和亚里士多德一样是一个具有广泛兴趣的人。他不仅是著名的天文学家和数学家,而且还是地理学家、历史学家,甚至还涉猎文学评论。他在数学方面他研究出一个素数系统,现在叫做厄拉多塞筛法(Eratosthenes sieve),是一种从按照顺序排列的所有自然数中找出素数的方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace ConAppPrimeNumberOther
{
class Program
{
static void Main(string[] args)
{
var s = new Stopwatch();
s.Start();
PrimeNumber.Find();
s.Stop();
System.Console.WriteLine("Watch: {0}ms",s.ElapsedMilliseconds);
s.Reset();
s.Start();
PrimeNumber.Find2();
s.Stop();
System.Console.WriteLine("Watch: {0}ms", s.ElapsedMilliseconds);
s.Reset();
s.Start();
PrimeNumber.Find3();
s.Stop();
System.Console.WriteLine("Watch: {0}ms", s.ElapsedMilliseconds);
s.Reset();
s.Start();
PrimeNumber.Find4();
s.Stop();
System.Console.WriteLine("Watch: {0}ms", s.ElapsedMilliseconds);
}
}
public class PrimeNumber
{
const int N = 1000000;
//const int N = 1000000;
//static int count = 0;
/*
一.经典算法
经典的素数判定算法是这样:给定一个正整数n,用2到sqrt(n)之间的所有整数去除n,如果可以整除,则n不是素数,如果不可以整除,则n就是素数。所以求小于N的所有素数程序如下:
*/
public static void Find()
{
int m, n;
int count = 0;
for (n = 2; n < N; n+