Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算n素数。。在爪哇?_Java_Primes - Fatal编程技术网

Java 计算n素数。。在爪哇?

Java 计算n素数。。在爪哇?,java,primes,Java,Primes,我在程序中打印出素数列表,并将其存储在数组中。然后我想得到一个特定索引上的素数,而不是总列表 import java.util.*; public class Gauss { static int n; static int[] array; public static void Input() { Scanner input = new Scanner(System.in); System.out.println("Enter N:

我在程序中打印出素数列表,并将其存储在数组中。然后我想得到一个特定索引上的素数,而不是总列表

import java.util.*;

public class Gauss {
    static int n;
    static int[] array;

    public static void Input() {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter N: ");
        n = input.nextInt();
    }

    public static boolean isPrime(int num) {
        boolean prime = true;
        int limit = (int) Math.sqrt(num);

        for (int i = 2; i <= limit; i++) {
            if (num % i == 0) {
                prime = false;
                break;
            }
        }

        return prime;
    }

    public static void Calc() {
        Input();
        array = new int[1000];

        for (int i = 2; i < array.length; i++) {
            array[i] = i;
        }

        ArrayList<Integer> list = new ArrayList<Integer>(array.length);

        for (int c : array) {
            list.add(c);
        }

        list.remove(0);
        list.remove(0);

        Collections.sort(list);

        for (int k : list) {
            if (isPrime(k)) {
                System.out.println(k);
            }
        }
    }

    public static void main(String[] args) {
        Calc();
    }
}
import java.util.*;
公共类高斯{
静态int n;
静态int[]数组;
公共静态无效输入(){
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入N:”);
n=input.nextInt();
}
公共静态布尔值isPrime(int num){
布尔素数=真;
int limit=(int)Math.sqrt(num);

对于(int i=2;i要获得第n个素数,只需使用数组[n-1]

要获得第n个素数,只需使用数组[n-1]

您可能会发现类似的问题很有用

你可以用

List<Integer> primes = findPrimes(0, n);
System.out.println( primes.get(i) );
使用上述类的方法之一(您不需要实际的基类和全部,只需要实际的方法),可以执行以下操作:

public class PrimeTest2 {

    static public int[] findPrimes(int max) {
        int[] primes = new int[max];
        int found = 0;
        boolean isPrime;

        // initial prime
        if (max > 2) {
            primes[found++] = 2;

            for (int x = 3; x <= max; x += 2) {
                isPrime = true; // prove it's not prime
                for (int i = 0; i < found; i++) {
                    isPrime = x % primes[i] != 0; // x is not prime if it is
                                                    // divisible by p[i]
                    if (!isPrime || primes[i] * primes[i] > x) {
                        break;
                    }
                }
                if (isPrime) {
                        primes[found++] = x; // add x to our prime numbers
                }
            }
        }

        return Arrays.copyOf(primes, found);
    }

    public static void main(String... args) {

        Scanner input = new Scanner(System.in);
        int MAX_N = Integer.MAX_VALUE / 100;
        int n = 0;
        while (n <= 0 || n >= MAX_N) {
            System.out.print("Enter N: ");
            n = input.nextInt();
            if (n <= 0) {
                System.out.println("n must be greater than 0");
            }
            if (n >= MAX_N) {
                System.out.println("n must be smaller than " + MAX_N);
            }
        }
        int max = n * 100; // just find enough prime numbers....

        int[] primes = findPrimes(max);
        System.out.println("Number of prime numbers found from " + 0 + " to "
                + max + " = " + primes.length);
        System.out.println("The " + n
                + (n == 1 ? "st" : n == 2 ? "nd" : n == 3 ? "rd" : "th")
                + " prime number is : " + primes[n - 1]);

    }
}
有了它,您就可以找到第n个素数了。对于较大的数(超过int),您必须修改“默认生成器”的未优化方法以接受
long
或使用其他方法(即其他语言和/或库)

干杯!

对于类似的问题,您可能会觉得有用

你可以用

List<Integer> primes = findPrimes(0, n);
System.out.println( primes.get(i) );
使用上述类的方法之一(您不需要实际的基类和全部,只需要实际的方法),可以执行以下操作:

public class PrimeTest2 {

    static public int[] findPrimes(int max) {
        int[] primes = new int[max];
        int found = 0;
        boolean isPrime;

        // initial prime
        if (max > 2) {
            primes[found++] = 2;

            for (int x = 3; x <= max; x += 2) {
                isPrime = true; // prove it's not prime
                for (int i = 0; i < found; i++) {
                    isPrime = x % primes[i] != 0; // x is not prime if it is
                                                    // divisible by p[i]
                    if (!isPrime || primes[i] * primes[i] > x) {
                        break;
                    }
                }
                if (isPrime) {
                        primes[found++] = x; // add x to our prime numbers
                }
            }
        }

        return Arrays.copyOf(primes, found);
    }

    public static void main(String... args) {

        Scanner input = new Scanner(System.in);
        int MAX_N = Integer.MAX_VALUE / 100;
        int n = 0;
        while (n <= 0 || n >= MAX_N) {
            System.out.print("Enter N: ");
            n = input.nextInt();
            if (n <= 0) {
                System.out.println("n must be greater than 0");
            }
            if (n >= MAX_N) {
                System.out.println("n must be smaller than " + MAX_N);
            }
        }
        int max = n * 100; // just find enough prime numbers....

        int[] primes = findPrimes(max);
        System.out.println("Number of prime numbers found from " + 0 + " to "
                + max + " = " + primes.length);
        System.out.println("The " + n
                + (n == 1 ? "st" : n == 2 ? "nd" : n == 3 ? "rd" : "th")
                + " prime number is : " + primes[n - 1]);

    }
}
有了它,您就可以找到第n个素数了。对于较大的数(超过int),您必须修改“默认生成器”的未优化方法以接受
long
或使用其他方法(即其他语言和/或库)


干杯!

您拥有的代码基本上是正确的,Roflcopter选择数字的答案是正确的,但是您可以做一个优化来显著提高性能。与其除以所有小于或等于平方根的数字,不如只除以小于或等于平方根的素数到目前为止,任何不能被素数整除的数也不能被素数的任何组合整除,这是非素数的定义(素数分解不是1*N)

您的代码基本上是正确的,Roflcopter选择数字的答案是正确的,但是您可以做一个优化来显著提高性能。与其除以所有小于或等于平方根的数字,不如只除以小于或等于平方根的素数。任何nu到目前为止,你发现的不可被素数整除的mber也不可被素数的任何组合整除,这是非素数的定义(具有除1*N以外的素数因子分解)

我想要一些饼干。你的问题是什么?可能重复我想要一些饼干。你的问题是什么?可能重复我想你的意思是
primes。获取(I)
而不是
primes[I]
首先,我甚至不确定您的程序应该做什么……它从stdin输入一个int,然后创建一个包含1000个元素的数组,并用2到1000的值填充它(跳过索引0和1),然后从数组中复制元素(包括索引0和1…两者都==0)在ArrayList中,删除前两个元素…对其排序(??),然后在每个元素上再次循环并打印任何素数元素…为什么是第一个输入?您想从该输入(第n个)打印素数?如果我必须更改您的代码,我必须全部重写(对不起,老实说)我在一个程序中打印出一个从2到1000的数字列表,并将其存储在一个数组中。然后我想用for each loop将这些数字添加到列表中,然后检查每个数字是否为素数。然后我想将所有素数添加到列表中,并得到特定索引上的素数。那么让我们假设da first prime是2。那么在l的索引1处ist应该是2,当我插入n的值为1时,程序应该是2作为它的第一个素数#…你可以继续修改代码..我想你的意思是
primes.get(i)
而不是
primes[i]
首先,我甚至不确定您的程序应该做什么……它从stdin输入一个int,然后创建一个包含1000个元素的数组,并用2到1000的值填充它(跳过索引0和1),然后从数组中复制元素(包括索引0和1…两者都==0)在ArrayList中,删除前两个元素…对其排序(??),然后在每个元素上再次循环并打印任何素数元素…为什么是第一个输入?您想从该输入(第n个)打印素数?如果我必须更改您的代码,我必须全部重写(对不起,老实说)我在一个程序中打印出一个从2到1000的数字列表,并将其存储在一个数组中。然后我想用for each loop将这些数字添加到列表中,然后检查每个数字是否为素数。然后我想将所有素数添加到列表中,并得到特定索引上的素数。那么让我们假设da first prime是2。那么在l的索引1处ist应该是2,当我插入n的值为1时,程序应该是2作为它的第一个素数#…你可以继续修改代码。。
Enter N: 10000
Number of prime numbers found from 0 to 1000000 = 78498
The 10000th prime number is : 104729