【发布时间】:2017-11-15 02:49:28
【问题描述】:
所以我试图在 java 中制作一个素数计算器,从 1 到用户给出的范围的上限,并打印出所有的素数。
解决这个问题的一种方法是简单地使用嵌套的 for 循环,并测试范围内的每个数字与小于它的所有数字的可分性。
但是,我认为只测试素数以避免重复因素并加快程序速度会更有效。
例如,如果我们所在的数字是 16,而不是测试它是否可以被 2、3、4、5、...14、15、16 整除,我只能测试出 2、3、5, 7,11,13,一旦找到一个因素就停止。
所以我尝试创建一个数组来存储目前找到的所有素数,并且只使用这些值来测试下一个数字。
这是我的代码,我不知道为什么它不起作用
Scanner sc = new Scanner (System.in);
System.out.print ("Enter the upper limit: ");
int high = sc.nextInt();
boolean isPrime = true;
int[] primearray = new int[0];
for (int num = 1; num <= high; num++)
{
for (int x: primearray)
{
if (num%x==0)
{
isPrime = false;
break;
}
}
if (isPrime == true) {
int size = primearray.length;
primearray = new int[size+1];
primearray [size] = num;
System.out.println (num);
}
}
【问题讨论】: