好的,所以我做了这个程序,验证一个数字是否为素数。我无法弄清楚如何制作一个程序,可以验证所有数字<你是黄金。你可以帮帮我吗?
import javax.swing.*;
public class Main {
public static void main(String[] args) {
int i;
int n;
boolean nPrime=true;
n = Integer.parseInt(JOptionPane.showInputDialog("Entrer un numero"));
for (i = 2; i < n; i++) {
if (n % i == 0) {
nPrime = false;
}
}
if (nPrime) {
System.out.println("Le numero " + n + " est prime");
} else
System.out.println("Le numero " + n + " n'est pas prime");
}
}
答案 0 :(得分:2)
如果您有很多better time-complexity
,我的答案会有queries
。我们可以在1000005
中预先计算小于O(nlg(n)lg(n))
的所有素数,然后为每个查询花费O(1)
时间来检查数字是否为素数。使用的算法是Seive Of Eratosthenes
如果您想了解有关算法的更多信息,请参阅以下链接: http://www.geeksforgeeks.org/sieve-of-eratosthenes/
static int MAX = 1000005;
public static void preComputeSeive(){
Arrays.fill(isPrime, true);
isPrime[0] = isPrime[1] = false;
for(int i = 2; i < MAX; i++){
if(isPrime[i]){
for(int j = i+i; j < MAX; j+=i){
isPrime[j] = false;
}
}
}
}
static boolean isPrime[] = new boolean[MAX];
public static void main(String args[]) throws IOException
{
int n = Integer.parseInt(JOptionPane.showInputDialog("Entrer un numero"));
if(n >= MAX){
System.out.println("Enter a valid number");
return;
}
preComputeSeive();
// count primes
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
System.out.println("Le numero " + i + " est prime");
} else {
System.out.println("Le numero " + i + " n'est pas prime");
}
}
}
答案 1 :(得分:1)
减少循环次数
public static void main(String[] args) {
int i;
int n,m;
m=(int)Math.sqrt(n);
boolean nPrime=true;
n = Integer.parseInt(JOptionPane.showInputDialog("Entrer un numero"));
for (i = 2; i <= m; i++) {
if (n % i == 0) {
nPrime = false;
break;
}
}
if (nPrime) {
System.out.println("Le numero " + n + " est prime");
} else
System.out.println("Le numero " + n + " n'est pas prime");
}
答案 2 :(得分:1)
你的意思是找到所有小于n的数字吗?
ArrayList<Integer> primes = new ArrayList();
int i;
int j;
boolean nPrime;
for (i = 2; i <= n; i++) {
nPrime = true;
for (j = 2; j <= (int) sqrt(i); j++) {
if (i % j == 0) {
nPrime = false;
break;
}
if (nPrime) primes.add(i);
}
System.out.println("Primes: " + Arrays.toString(primes.toArray());
答案 3 :(得分:0)
从http://introcs.cs.princeton.edu/java/14array/PrimeSieve.java.html
被盗import javax.swing.*;
public class PrimeSieve {
public static void main(String[] args) {
int n = Integer.parseInt(JOptionPane.showInputDialog("Entrer un numero"));
// initially assume all integers are prime
boolean[] isPrime = new boolean[n + 1];
for (int i = 2; i <= n; i++) {
isPrime[i] = true;
}
// mark non-primes <= n using Sieve of Eratosthenes
for (int factor = 2; factor * factor <= n; factor++) {
// if factor is prime, then mark multiples of factor as nonprime
// suffices to consider mutiples factor, factor+1, ..., n/factor
if (isPrime[factor]) {
for (int j = factor; factor * j <= n; j++) {
isPrime[factor * j] = false;
}
}
}
// count primes
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
System.out.println("Le numero " + i + " est prime");
} else {
System.out.println("Le numero " + i + " n'est pas prime");
}
}
}
}
答案 4 :(得分:0)
我会尽量不改变您的代码来回答您的问题。
create table users (id bigint not null auto_increment, fullname varchar(255), password varchar(255), username varchar(255), primary key (id))