我正在试图弄清楚如何随机取一个素数。
我的意思是,结果必须只是一个素数。
我已经创建了一个方法checkPrime(int a, int b)
来检查数字是否为素数。
然后,我从0
循环到256
并搜索素数。
之后,我必须随机获得其中一个素数。
从下面的代码中,打印结果为:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
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等等。
我该怎么做才能解决这个问题?
答案 0 :(得分:1)
如果你愿意,你可以停止循环的执行;所以你会做这样的事情:
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;
}
}
这样一旦你的循环找到了它的第一个素数,它就会中止计算。
编辑:要添加随机元素,您必须选择随机检查的数字或选择随机停止的位置。一个例子可能是这样的:
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个随机数。如果你想确定你找到一个,我建议这样的话:
System.out.println("Prime number: ");
Ramdom rand = new Random();
int prime;
do {
prime = rand.nextInt();
} while(!checkPrime(prime, 5));
System.out.print(prime + " ");
答案 1 :(得分:1)
例如,您可以将每个素数放在一个表中,然后从该表中随机选取一个元素。
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())));
小心,我没有测试它;)
答案 2 :(得分:1)
您可以执行以下操作:
将所有素数存储在arraylist中,然后将其洗牌或获得随机索引。
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);
答案 3 :(得分:1)
这样做
ArrayList<Integer>
random
函数访问该数组列表中的数字。假设ArrayList
大小为10而不是使用随机函数来生成0到9之间的随机数,那么您可以使用该数字来访问arrayList元素。
答案 4 :(得分:0)
你可以在一个数组中为你输入Prime数字。 然后从数组中随机选择一个索引。
int[] array = new int[100];
int i = 0 ;
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){
array[i] = a ;
i++;
}
}
int minimum = 0 ;
int maximum = array.length();
int randomNum = minimum + (int)(Math.random()*maximum);
System.out.println(array[randomNum]);
答案 5 :(得分:0)
你可以这样做:
创建一个列表来存储素数:
ArrayList<Integer> primeNums = new ArrayList<>();
将每个素数存储在列表中:
System.out.println("Prime number: ");
for(int a = 0; a < 256; a++){
if(checkPrime(a, 5)){
primeNums.add(a);
}
}
在列表的范围内选择一个随机索引:
Random r = new Random();
int randomIndex = r.nextInt(primeNums.size());
选择素数:
Integer myRandomPrime = primeNums.get(randomIndex);
答案 6 :(得分:0)
首先,插入素数:
for(int a = 0; a < 256; a++){
boolean checkIt = checkPrime(a, 5); //check whether the number is prime or not
if(checkIt){
PrimeNumebrArray.add(a); //PrimeNumebrArray is array list object
arraySize++; //array index counter, initialized at 0
}
}
现在,生成随机数
int index = Math.random() * arraySize;
这将返回[0,arraySize]范围内的值。
int PrimeNumebr = PrimeNumebrArray.get(index);
答案 7 :(得分:0)
也许这个?
public int getPrime() {
List<Integer> primes = getPrimes();
int idx = System.currentTimeMillis() % primes.size();
return primes.get(idx);
}
private List<Integer> getPrimes() {
List<Integer> primes = new ArrayList<>();
for(int a = 0; a < 256; a++){
boolean checkIt = checkPrime(a, 5); //check whether the number is prime or not
if(checkIt){
primes.add(a);
}
}
}
}
它不是很强大,但根据您的使用情况可能就足够了。