首先,说明一下个人基于的一般性素数规律
1. 素数只可能是个位数为1、3、7、9的数值(这里不包含10以下的数),所以没有必要去检查个位数为0、2、4、5、6、8的数
2. 除了10以内的数,后面的素数不可能有连续的
3. 尾数1379的非素数也只可能是素数之积
下面是代码,欢迎评论
public static long FindPrime(long n)
{
long num = 1, count = 0, result = 0;
while (true)
{
if (count == n) break;
if (CheckPrime(num) == false)//不是素数
{
result = num;
num = num < 11 ? num + 1 : num + 2;//检查到10的时候+1,之后就保证num的个位数总是1、3、7、9之一
}
else
{
count++;
result = num;
num = num < 10 ? num + 1 : num + 2;//跟上面道理一样
}
}
return result;
}
//检查是否为素数
public static bool CheckPrime(long n)
{
if (n == 1) return false;
if (1 < n && n <= 3) return true;
else
{
long i = 2;
while (n > i)
{
if (n % i == 0) return false;
if (i <= n / 2) { i = i <= 10 ? i + 1 : i + 2; continue; }//如果一个数是素数,只需要循环检查最多它的一般次数
else break; //这里设置10之后i+2是为了减少循环次数,降低算法复杂度
}
return true;
}
}
好了,到这里就结束了,当然这肯定不是什么很好的算法,只是贴出来分享而已