C#找梅森素数
梅森素数是由梅森数而来。
所谓梅森数,是指形如2p-1的一类数,其中指数p是素数,常记为Mp 。如果梅森数是素数,就称为梅森素数。比如2^2-1=3,2^3-1=7,2^5-1=31,2^7-1=127,指数P也是素数,同时也用M2,M3,M5,M7表示。
用因式分解法可以证明,若2n-1是素数,则指数n也是素数;反之,当n是素数时,2n-1(即Mp)却未必是素数。前几个较小的梅森数大都是素数,然而梅森数越大,梅森素数也就越难出现。
2008年8月23日,美国加州大学洛杉矶分校的计算机专家史密斯终于发现超过1000万位的梅森素数 。 它有12978189位数,如果用普通字号将这个巨数连续打印下来,它的长度可超过50公里!这一成就被美国的《时代》杂志评为 “2008年度50项最佳发明” 之一,排名在第29位。
2013年1月,美国中央密苏里大学数学教授柯蒂斯·库珀领导的研究小组发现了第48个梅森素数 。[12] 这一发现被英国《新科学家》周刊评为当年自然科学十大突破之一。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace ConAppPrimeNumber2
{
//Mersenne prime number
//梅森素数的公式2^P-1(用2的幂次方减1表示,其中P也是一个素数)
//比如2^2-1=3,2^3-1=7,2^5-1=31,2^7-1=127,指数P也是素数
//同时也用M2,M3,M5,M7表示
class Program
{
static void Main(string[] args)
{
System.Diagnostics.Stopwatch s = new Stopwatch();
PrimeNumber.testPower();
System.Console.WriteLine();
s.Reset();
s.Start();
PrimeNumber.Find5();
s.Stop();
System.Console.WriteLine("Watch Time:{0}m, {1}s, {2}ms", s.Elapsed.Minutes, s.Elapsed.Seconds, s.ElapsedMilliseconds);
System.Console.WriteLine();
s.Reset();
s.Start();
PrimeNumber.Find6();
s.Stop();
System.Console.WriteLine("Watch Time:{0}m, {1}s, {2}ms", s.Elapsed.Minutes, s.Elapsed.Seconds, s.ElapsedMilliseconds);
}
}
public class PrimeNumber
{
static int n = 100000; //查找100(n=100)以内的素数
//static int n = 1000000;
static bool IsPN = false; //找到素数就设置为true
static