java随机只获得一个素数

时间:2014-04-16 09:41:38

标签: java primes

我正在试图弄清楚如何随机取一个素数。

我的意思是,结果必须只是一个素数。

我已经创建了一个方法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等等。

我该怎么做才能解决这个问题?

8 个答案:

答案 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)

这样做

  1. ArrayList<Integer>
  2. 中循环重新存储素数
  3. 获取arraylist的大小并使用random函数访问该数组列表中的数字
  4. 例如,

    。假设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);
      }  
    }
  }
}

它不是很强大,但根据您的使用情况可能就足够了。