我正在编写一个带有一些素数相关方法的小库.因为我已经完成了基础工作(也就是工作方法),现在我正在寻找一些优化.当然,互联网是一个很好的地方.然而,我偶然发现了一个四舍五入的问题,我想知道如何解决这个问题.
在循环中,我用它来测试一个数字,因为它的搜索效率更高,搜索直到sqrt(n)而不是n/2甚至n - 1.但由于舍入问题,一些数字会被跳过,因此会跳过一些素数!例如,第10000个素数应为:104729,但"优化"版本最终为:103811.
一些代码(我知道,它可以进行更多优化,但我一次只能处理一件事):
/// <summary>
/// Method for testing the primality of a number e.g.: return IsPrime(29);
/// History:
/// 1. Initial version, most basic form of testing: m smaller then n -1
/// 2. Implemented m smaller then sqrt(n), optimization due to prime factoring
/// </summary>
/// <param name="test">Number to be tested on primality</param>
/// <returns>True if the number is prime, false otherwise</returns>
public static bool IsPrime(int test)
{
// 0 and 1 are not prime numbers …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来找到最接近的素数.大于或小于,无关紧要,只是最接近(没有溢出,最好是.)至于速度,如果它可以在1GHz机器上大约50毫秒计算它(在软件中,在Linux内运行),我会欣喜若狂.
我知道通常的方法是迭代地找到n-1阶乘,然后检查.但是它具有O(n)的复杂性并且对于大n需要太多时间.还有其他选择吗?
我得到了这个代码,检查一个数字是否是一个素数:
public static bool isPrime(int num)
{
if (num == 1) return false;
if (num == 2) return true;
int newnum = Math.Floor(Math.Sqrt(num));
for (int i = 2; i <= newnum; i++)
if (num % i == 0) return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好更快的方法来检查数字是否是素数?
可能重复:
最快的素数测试算法
非常感谢对C#中快速素性测试的示例代码的引用,最好使用BigInteger或其他可变大小类型.
我试图找出数字是否是1000或更长的素数.我想使用的算法是6k +/- 1
我面临的问题是如何在java中存储这么长的数字,它是以字符串作为输入.
要么
为了做到可分性,应该只考虑数字的最后几位数.
请指教