作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以...我在实验室遇到了一些问题。我已经这样做了一段时间,但我的程序并没有按照我的预期进行。我目前正在用 Java 编写埃拉托斯特尼筛法程序。不幸的是,它没有给出素数列表的预期输出。我一生都无法弄清楚出了什么问题...这里有人能给我指出我可能在哪里搞砸了吗?
非常感谢!
import java.util.*;
import java.math.*;
public class primeSieve {
/**
* @param args
*/
public static void main(String[] args){
// TODO Auto-generated method stub
Scanner kb = new Scanner(System.in);
//Get user input
System.out.println("Please enter the first number of the set of numbers to calculate primes (first number MUST be prime):");
int first = kb.nextInt();
System.out.println("Please enter the last number of the set of numbers to calculate primes (first number MUST be prime):");
int last = kb.nextInt();
List<Integer> primeList = new ArrayList<Integer>();
List<Integer> numList = new ArrayList<Integer>();
//Make array with values from 2 to the last value entered by user
for(int i = 2; i <= last; i++){
numList.add(i);
}
int size = numList.size();
//Calculate primes
for(int i = 0; i < size; i++)
{
if(i != 0 && i % 2 == 0){continue;} //No point in checking even numbers
if(numList.get(i) == 0){continue;} //If a value has been removed, it's been set to 0. No need to check it.
int prime = numList.get(i); //The current number being worked on. Should be prime
primeList.add(prime); //The number is prime, put it into the prime list.
for(int j = prime; j < size; j += prime) //Loop to remove multiples
{
numList.set(j, 0); //Number is a multiple of the prime previously calculated. Set it to 0, not a prime.
}
}
int primeSize = primeList.size();
System.out.println(primeSize);
System.out.println("The prime numbers from " + first + " to " + last + " are:");
for(int i = first; i < primeSize; i++)
{
System.out.println(primeList.get(i));
}
}
}
编辑:当我查找 2 到 50 之间的素数时,程序的输出是这样的:
从 2 到 50 的素数是:713192531394349
最佳答案
在嵌套的 for
循环中,您从 prime
处开始 j
。但是,考虑素数 2:它位于索引 0,而不是索引 2。如果您在 prime-first
处启动 j
,事情应该会成功。另外,正如评论者指出的那样,您的打印循环应该从索引 0 开始,而不是 first
。
关于java - 有些帮助找出我的埃拉托斯特尼筛出了什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21568476/
我正在尝试编写一个函数,使用 "Sieve of Sundaram" algorithm 从 1..n 计算所有奇数素数. 这是我的尝试: sSund :: Integer -> [Integer]
我是 Haskell 的新手,对于我正在实现的事情,我需要一个素数列表。我试着写一个,但它太慢了。 这是我尝试过的。 primeList = primes 1000 primes :: Int ->
我是一名优秀的程序员,十分优秀!