今天重新浏览了之前的一个老帖,帖子的基本内容大概是讨论求100以内质数(素数)的方法,随意看了一下,自己随意写了一个,稍稍优化一下就不管了。今天突然想起又去仔细看了看,帖子后来变成讨论求出1000万以内所有质数的算法。
再用自己的程序跑了一下,发现用时18秒,惭愧啊。
找了一个高手的回答跑了一下,发现用时400毫秒。。。差距啊。
他的代码如下:
static void ListPrime(int n) {
/**
* false为质数,true为合数
*/
boolean[] primeList = new boolean[n + 1];
for (int i = 2; i <= n; i++) {
if (!primeList[i]) {
int j = i * i;
if (j > n)
break;
if (i > 2) {
while (j <= n) {
primeList[j] = true;
j = j + i + i;
}
} else {
while (j <= n) {
primeList[j] = true;
j = j + i;
}
}
}
}
List<Integer> ret = new ArrayList<Integer>(10000);
ret.add(2);
for (int i = 3; i <= n;) {
if (!primeList[i]) {
//System.out.print(i + " ");
ret.add(i);
}
i += 2;
}
System.out.println(ret.size());
}
中间的核心代码没有看懂,先记下来,在琢磨琢磨
分享到:
相关推荐
概率算法求8皇后问题与概率算法输出1000万以内的质数等带有分析文档
找出1000以内的所有完数,即一个数等于其所有真因子(除了自身之外的因子)之和。 **知识点解析:** - **完数概念**:特殊的数学数列。 - **因子计算**:找出一个数的所有因子。 - **循环结构**:使用循环结构遍历1...
遍历10万以内的数,进行平方根判断。 14. **日期计算**: 输入年月日,判断这是当年的第几天。要考虑闰年,以及1月和2月的天数。 15. **整数排序**: 输入三个整数x、y、z,按从小到大排序。可以使用冒泡排序或...
- **解决方案**:可以在一定的范围内(例如10万以内)进行搜索。对于每一个数字,首先检查它加上100后的结果是否为完全平方数,如果是,则进一步检查加上268后的结果是否也为完全平方数。这可以通过取平方根并检查...
问题3要求找到100万以内最大的梅森素数,排序和搜索算法可能会派上用场。 10. **数学归纳法**:证明某些规律的正确性。 在项目"project-euler-master"中,你可以期待找到一系列JavaScript代码文件,每个文件对应一...
编程找出1000以内的所有完数。 **解析**: - 遍历1至1000之间的每一个数。 - 对于每个数,找到它的所有真因子并求和。 - 检查因子之和是否等于原数。 **示例代码**: ```csharp void FindPerfectNumbers() { for ...