import java.util.Stack;
public class Primes{
public static void main(String[]args){
Stack<Integer> stack = new Stack<Integer>();
stack.push(null);
//number of primes to display
final int NUMBER_OF_PRIMES = 50;
//number of primes to display per line
final int NUMBER_OF_PRIMES_PER_LINE = 10;
//count number of primes
int count = 0;
int number = 2;
System.out.println("The first 50 primes are \n");
while(count < NUMBER_OF_PRIMES){
boolean isPrime = true;
for(int divisor = 2; divisor <= number/2; divisor++){
if(number % divisor == 0){
isPrime = false;
break;
}
}
if(isPrime){
count++;
if(count % NUMBER_OF_PRIMES_PER_LINE ==0){
System.out.println(number);
}
else
System.out.print(number + " ");
}
number++;
}
}
}
答案 0 :(得分:0)
注意:Stack是一个不应该再使用的旧类。你应该更喜欢ArrayList。
答案 1 :(得分:0)
因为这是一个家庭作业问题,所以我不会给出代码,但这是一个过程,从代码中的某个地方开始。
number
是素数,请将其推入堆栈。答案 2 :(得分:0)
首先,看一下Finding prime numbers with the Sieve of Eratosthenes (Originally: Is there a better way to prepare this array?)讨论更好的寻找素数的方法。然后,根据“后进先出”属性,使用堆栈来颠倒顺序。
答案 3 :(得分:0)
堆栈的一个有趣属性是它可以用于逆序。这是因为要推到它的第一个项目是最后一个关闭。
想象一下,如果我将“pan”这个词的字母逐个推到堆栈上。我首先按“p”,然后按“a”,然后按“n”。现在,因为“n”是推送的最后一个字母,所以它是第一个从堆栈中弹出的字母。所以,当我删除这些字母后,我得到“n”,然后是“a”,然后是“p” - “nap”。以这种方式,可以使用堆栈通过将其视为字符列表来反转单词。
素数列表也是如此。如果您有一个按升序排列的第一个NUMBER_OF_PRIMES
素数列表(例如:2,3,5,7 ......),那么您可以使用堆栈执行相同的技巧,将该列表更改为按顺序顺序将每个推入堆栈,然后将其读取。
所以,我要做的就是每次检测到素数时,将它推到堆栈上,直到堆栈上有NUMBER_OF_PRIMES
个素数。然后,从堆栈中弹出每个项目,以相反的顺序打印它们。
一旦运行完毕,将isPrime
逻辑分解为自己的功能也是值得的。