首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java只随机获取一个质数

java只随机获取一个质数
EN

Stack Overflow用户
提问于 2014-04-16 17:41:38
回答 8查看 1.3K关注 0票数 1

我在想如何随机取一个质数。

我的意思是,结果只能是一个质数。

我已经创建了一个方法checkPrime(int a, int b)来检查数字是否为质数。

然后,我从0循环到256并搜索质数。

在那之后,我必须随机得到其中一个质数。

从我下面的部分代码中,它输出了结果:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

代码语言:javascript
复制
    System.out.println("Prime number: ");
    for(int a = 0; a < 256; a++){  
        boolean checkIt = checkPrime(a, 5); //check whether the number is prime or not
        if(checkIt){
            System.out.print(a + " "); 
        }  
    }

我期望的结果是只有一个质数。可能是3,43,17,31,等等。

我必须做些什么才能解决这个问题?

EN

回答 8

Stack Overflow用户

发布于 2014-04-16 17:44:12

如果愿意,您可以停止循环的执行;因此,您可以这样做:

代码语言:javascript
复制
System.out.println("Prime number: ");
for(int a = 0; a < 256; a++){  
    boolean checkIt = checkPrime(a, 5); //check whether the number is prime or not
    if(checkIt){
        System.out.print(a + " "); 
        break;
    }  
}

这样,一旦你的循环找到了它的第一个质数,它就会中止计算。

编辑:要添加随机元素,您必须选择随机检查的数字或选择随机停止的位置。一个例子可能是:

代码语言:javascript
复制
System.out.println("Prime number: ");
Ramdom rand = new Random();
for(int a = 0; a < 256; a++){  
    int check = random.nextInt();
    boolean checkIt = checkPrime(check, 5); //check whether the number is prime or not
    if(checkIt){
        System.out.print(check + " "); 
        break;
    }  
}

这将检查多达256个随机数。如果你想确保你能找到一个,我建议这样做:

代码语言:javascript
复制
System.out.println("Prime number: ");
Ramdom rand = new Random();
int prime;
do {  
    prime = rand.nextInt();
} while(!checkPrime(prime, 5));
System.out.print(prime + " ");
票数 1
EN

Stack Overflow用户

发布于 2014-04-16 17:45:20

例如,您可以将每个质数放入一个表中,然后从该表中随机抽取一个元素。

代码语言:javascript
复制
Random generator = new Random();
List<Integer> primes = new ArrayList<Integer>();
System.out.println("Prime number: ");
     for(int a = 0; a < 256; a++){  
          if(checkPrime(a, 5)){
                primes.add(a);
          }  
     }
System.out.print(primes.get(generator.nextInt(primes.size()))); 

小心点,我没有测试它;)

票数 1
EN

Stack Overflow用户

发布于 2014-04-16 17:48:07

您可以执行以下操作:

将所有质数存储在arraylist中,然后对其进行混洗或获取随机索引。

代码语言:javascript
复制
ArrayList<Integer>  lista = new ArrayList<Integer>();

    for(int a = 0; a < 256; a++){  
            boolean checkIt = checkPrime(a, 5); //check whether the number is prime or not
            if(checkIt){
                lista.add(a);
            }  
        }

Collections.shuffle(lista);
System.out.println(lista.get(0));


 // or

Random r = new Random();
int index = r.nextInt(lista.size()); 

Integer RandPrimeNum = lista.get(index);
 System.out.println(""+RandPrimeNum);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23105604

复制
相关文章

相似问题

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