我现在被要求创建一个机器代码,它将生成多个不同的随机质数,并使其输出从最高质数到最低质数顺序显示
我已经完成了isPrime方法的工作,输出只给出了一个随机素数。
package isPrime.isPrime;
import java.util.Scanner;
import java.util.Random;
public class Primusnumberus {
public static void main(String[] args) {
int num = 0;
Random rand = new Random();
num = rand.nextInt(1000) + 1;
while (!isPrime(num)) {
num = rand.nextInt(1000) + 1;
}
System.out.println(num);
}
private static boolean isPrime(int inputNum){
if (inputNum <= 3 || inputNum % 2 == 0)
return inputNum == 2 || inputNum == 3;
int divisor = 3;
while ((divisor <= Math.sqrt(inputNum)) && (inputNum % divisor != 0))
divisor += 2;
return inputNum % divisor != 0;
}
}我期望(println) 731 11 971 53 17的输出
发布于 2019-01-26 20:03:46
您可以运行循环并将这些随机质数添加到列表中。然后对列表进行排序并将其打印在末尾,如下所示:
package isPrime.isPrime;
import java.util.*;
public class Primusnumberus {
public static void main(String[] args) {
int num = 0;
int numberCount = 24;
int counter = 0;
Random rand = new Random();
List<Integer> primeList = new ArrayList<>();
while (counter < numberCount) {
num = rand.nextInt(1000) + 1;
while (!isPrime(num)) {
num = rand.nextInt(1000) + 1;
}
if (!primeList.contains(num)) {
primeList.add(num);
counter ++;
}
}
Collections.sort(primeList);
System.out.println(primeList);
}
private static boolean isPrime(int inputNum){
if (inputNum <= 3 || inputNum % 2 == 0)
return inputNum == 2 || inputNum == 3;
int divisor = 3;
while ((divisor <= Math.sqrt(inputNum)) && (inputNum % divisor != 0))
divisor += 2;
return inputNum % divisor != 0;
}
}我刚刚根据你的需求更新了你的代码。但这不是获得随机质数的好方法,因为当数量增加时可能需要一段时间。
发布于 2019-01-26 20:02:01
例如,您必须在循环中生成素数
for(int i = 0; i < 25; i++){ // If you do not want 25 Primes change it here
num = rand.nextInt(1000) + 1;
while (!isPrime(num)) {
num = rand.nextInt(1000) + 1;
}
System.out.println(num);
}顺便说一句:使用Random生成它们可能会导致程序的执行时间非常长。如果你只需要1001的素数,我建议你全部生成它们,然后随机选择它们。(以列表为例)
https://stackoverflow.com/questions/54378089
复制相似问题