生成素数很简单,但是找到它并递归生成(素数)的最快方法是什么?
这是我的解决方案。然而,这并不是最好的方法。我认为它是 O(N*sqrt(N))。如果我错了,请纠正我。
public static boolean isPrime(int n) {
if (n < 2) {
return false;
} else if (n % 2 == 0 & n != 2) {
return false;
} else {
return isPrime(n, (int) Math.sqrt(n));
}
}
private static boolean isPrime(int n, int i) {
if (i < 2) {
return true;
} else if (n % i == 0) {
return false;
} else {
return isPrime(n, --i);
}
}
public static void generatePrimes(int n){
if(n < 2) {
return ;
} else if(isPrime(n)) {
System.out.println(n);
}
generatePrimes(--n);
}
public static void main(String[] args) {
generatePrimes(200);
}
在数学中,阿特金筛是一种快速、现代的算法,用于查找指定整数以内的所有素数。
维基百科文章 http://en.wikipedia.org/wiki/Sieve_of_Atkin(包含伪代码)
为了解决递归地执行此操作的问题,也许埃拉托斯特尼筛法 http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes可以递归实现。这page http://www.cs.cmu.edu/~scandal/cacm/node8.html可能会有所帮助,因为它似乎讨论了递归实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)