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