验证某些数字是素数的程序?

时间:2016-10-26 19:59:36

标签: java

好的,所以我做了这个程序,验证一个数字是否为素数。我无法弄清楚如何制作一个程序,可以验证所有数字<你是黄金。你可以帮帮我吗?

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");


    }
}

5 个答案:

答案 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))