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