Java 如何将arraylist方法用于其他方法?

Java 如何将arraylist方法用于其他方法?,java,Java,我应该找到并返回素数序列中的第k个元素。例如,如果k=5,那么第五个素数是11。(2, 3, 5, 7, 11, 13, 17, 19, 23...). 我也在努力通过测试 我能够制作列表方法和kthPrime方法,但我不知道如何将它们结合使用。当测试仪运行并且失败时,我的kthPrime方法非常慢 为了加快这个过程,我们应该使用arraylist来存储生成的素数序列(需要在1分钟内找到) import java.util.*; 导入java.util.ArrayList; 公共类素数{ 公共静

我应该找到并返回素数序列中的第k个元素。例如,如果k=5,那么第五个素数是11。(2, 3, 5, 7, 11, 13, 17, 19, 23...). 我也在努力通过测试

我能够制作列表方法和kthPrime方法,但我不知道如何将它们结合使用。当测试仪运行并且失败时,我的kthPrime方法非常慢

为了加快这个过程,我们应该使用arraylist来存储生成的素数序列(需要在1分钟内找到)

import java.util.*;
导入java.util.ArrayList;
公共类素数{
公共静态布尔iPrime(int n){

如果(n一个简单的方法是增强kthPrime方法,使其也能接受已知素数的列表。如果k小于列表的长度,您只需从列表中检索第k个素数。如果k小于列表的长度,您可以将素数添加到列表中,直到其为k长,然后检索最后一个元素。

您可以通过如果最大限制允许,应用Eratosthene的筛分算法。从这里检查算法-

公共静态数组列表(int n){
//创建布尔数组&将完整数组初始化为true。
//如果我不是素数,素数[i]中的值最终将为假,否则为真。
布尔素数[]=新布尔值[n+1];

对于(int i=0;iTo start with),您有一个
String
列表,而不是
Integer
Long
import java.util.*;
import java.util.ArrayList;

 public class Primes {
  
  public static boolean isPrime(int n) {

    if (n <= 1) 
        return false; 

    if (n <= 3) 
        return true; 
    if (n % 2 == 0 || n % 3 == 0) 
        return false; 

    for (int i = 5; i * i <= n; i = i + 6) 
        if (n % i == 0 || n % (i + 2) == 0) 
            return false; 
            
    return true; 
    
}
    
private static ArrayList<Integer> list(int x) {
    ArrayList list = new ArrayList<String>();
     for (int i = 0 ; i < 100000 ; i++) {
         if(isPrime(i) == true)
         list.add(i);
   }
return list;
}

public static int kthPrime(int k){
int max = 100000000;
int i;
int counter=1;
for (i = 0 ; i <=max ; i++){
    
    if (isPrime(i) == true){
        counter++;
        if(counter > k)
            break;
    }
}
return i;
}


public static void main(String args[]){

    int k;
    Scanner input = new Scanner(System.in);
    System.out.println("Enter k");
    k = input.nextInt();
    System.out.println("kth prime = "+Primes.kthPrime(k));
    System.out.println("primelist = "+Primes.list(k));
   }
  }
 import static org.junit.Assert.*;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;

 import java.io.*;
 import java.util.*;
 import java.util.zip.CRC32;

public class PrimesTest {

@Test public void isPrimeTest() {
    CRC32 check = new CRC32();
    for(int k = 0; k < 10_000_000; k++) {
        if(Primes.isPrime(k)) { check.update(k); }            
    }
    assertEquals(783904569L, check.getValue());
}

@Test public void kthPrimeTest() {
    CRC32 check = new CRC32();
    for(int k = 0; k < 30_000; k++) {
        check.update(Primes.kthPrime(k));
    }
    assertEquals(3080752681L, check.getValue());
   }
 }
  
 public static ArrayList<Integer> list(int n) { 
    // Create a boolean array & initialize full array as true. 
    // A value in prime[i] will finally be false if i is not a prime, else true.
    boolean prime[] = new boolean[n+1]; 
    for(int i=0;i<n;i++) 
        prime[i] = true; 
    
    for(int p = 2; p*p <=n; p++) 
    { 
        // If prime[p] is not changed, then it is a prime 
        if(prime[p] == true) 
        { 
            // Update all multiples of p 
            for(int i = p*p; i <= n; i += p) 
                prime[i] = false; 
        } 
    } 
 
    ArrayList list = new ArrayList<Integer>();
    for(int i = 2; i <= n; i++) 
    { 
        if(prime[i] == true) 
            list.add(i);// i is prime 
    }
 
   return list;
}