首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在输出中再添加24个素数,并将其从低到高排列?

如何在输出中再添加24个素数,并将其从低到高排列?
EN

Stack Overflow用户
提问于 2019-01-26 19:49:56
回答 2查看 41关注 0票数 1

我现在被要求创建一个机器代码,它将生成多个不同的随机质数,并使其输出从最高质数到最低质数顺序显示

我已经完成了isPrime方法的工作,输出只给出了一个随机素数。

代码语言:javascript
复制
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的输出

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-26 20:03:46

您可以运行循环并将这些随机质数添加到列表中。然后对列表进行排序并将其打印在末尾,如下所示:

代码语言:javascript
复制
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;
    }
}

我刚刚根据你的需求更新了你的代码。但这不是获得随机质数的好方法,因为当数量增加时可能需要一段时间。

票数 1
EN

Stack Overflow用户

发布于 2019-01-26 20:02:01

例如,您必须在循环中生成素数

代码语言:javascript
复制
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的素数,我建议你全部生成它们,然后随机选择它们。(以列表为例)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54378089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档