【问题标题】:Java:Counting prime numbersJava:计算素数
【发布时间】:2014-04-28 13:28:30
【问题描述】:

所以我写了这段代码,我很自豪,因为我很长时间没有写代码了。它的作用是询问一个数字,然后打印从 1 到该数字的所有质数。

import java.util.Scanner;
class PrimeNumberExample {

    public static void main(String args[]) {

        //get input till which prime number to be printed
        System.out.println("Enter the number till which prime number to be printed: ");
        int limit = new Scanner(System.in).nextInt();

        //printing primer numbers till the limit ( 1 to 100)
        System.out.println("Printing prime number from 1 to " + limit);
        for(int number = 2; number<=limit; number++){
            //print prime numbers only
            if(isPrime(number)){
                System.out.println(number);
            }
        }

    }

    /*
     * Prime number is not divisible by any number other than 1 and itself
     * @return true if number is prime
     */
    public static boolean isPrime(int number){
        for(int i=2; i<number; i++){
            if(number%i == 0){
                return false; //number is divisible so its not prime
            }
        }
        return true; //number is prime now
    }
}

但是,我想要它做的是要一个数字,让我们取 10,然后打印前 10 个素数,我试图看看是否能找到方法,但我不知道如何因为我没有那么多使用java。我希望你能并且会帮助我。

【问题讨论】:

  • 所以你可以做到这一点,但不能做其他任务?嗯...
  • 只是因为这个问题是关于生成素数的,也许看看Sieve of Eratosthenes
  • 您必须使用计数来停止生成素数,而不是使用循环索引。在下面检查我的代码... :)

标签: java primes


【解决方案1】:

只需计算到目前为止已经打印了多少个素数。如果这个数字超过 10 则停止。你的循环应该是这样的:

for(int number = 2; number<=limit; number++){
            //print prime numbers only
            if(isPrime(number)){
                System.out.println(number);
                count++; 
            }
        }

完整代码:

import java.util.Scanner;
class PrimeNumberExample {

    public static void main(String args[]) {

        //get input till which prime number to be printed
        System.out.println("Enter the amount of prime numbers to be printed: ");
        int limit = new Scanner(System.in).nextInt();
        int count=0;

        //printing primer numbers till the limit ( 1 to 100)
        System.out.println("Printing prime number from 1 to " + limit);
        for(int number = 2; number<=limit; number++){
            //print prime numbers only
            if(isPrime(number)){
                System.out.println(number);
                count++; 
            }
        }

    }

    /*
     * Prime number is not divisible by any number other than 1 and itself
     * @return true if number is prime
     */
    public static boolean isPrime(int number){
        for(int i=2; i<number; i++){
            if(number%i == 0){
                return false; //number is divisible so its not prime
            }
        }
        return true; //number is prime now
    }
}

【讨论】:

    【解决方案2】:

    试试这个:

    public static void main(String[] args) throws Exception {
    
        // get input till which prime number to be printed
        System.out.println("Enter the number till which prime number to be printed: ");
        int limit = new Scanner(System.in).nextInt();
    
        // printing primer numbers till the limit ( 1 to 100)
        System.out.printf("Printing first %d prime numbers\n", limit);
        for (int number = 2; limit > 0; number++) {
            if (isPrime(number)) {
                System.out.println(number);
                limit--;
            }
        }
    }
    
    /*
     * Prime number is not divisible by any number other than 1 and itself
     * 
     * @return true if number is prime
     */
    public static boolean isPrime(int number) {
        for (int i = 2; i < number; i++) {
            if (number % i == 0) {
                return false; // number is divisible so its not prime
            }
        }
        return true; // number is prime now
    }
    

    【讨论】:

      【解决方案3】:

      试试这个,它很容易计算出有多少是素数的数字!!!

        public static void main(String args[]) {
      
              //get input till which prime number to be printed
              System.out.println("Enter the number till which prime number to be printed: ");
              int limit = new Scanner(System.in).nextInt();
      
              //printing primer numbers till the limit ( 1 to 100)
              System.out.println("Printing prime number from 1 to " + limit);
              int count = 0;
              for(int number = 2; count<limit; number++){
                  //print prime numbers only
                  if(isPrime(number)){
                      count++;
                      System.out.println(number);
                  }
              }
      
          }
      

      【讨论】:

        【解决方案4】:

        你也可以这样试试..

        public static void main(String args[]) {
        
            //get input till which prime number to be printed
            System.out.println("Enter the number till which prime number to be printed: ");
            int limit = new Scanner(System.in).nextInt();
        
            //printing primer numbers till the limit ( 1 to 100)
            System.out.println("Printing prime number from 1 to " + limit);
            int number = 2;
            for(int i = 0; i < limit;){         
                //print prime numbers only
                if(isPrime(number)){
                    System.out.println(number);
                    i++;
                } 
                number = number + 1;
            }
        
        }
        
        /*
         * Prime number is not divisible by any number other than 1 and itself
         * @return true if number is prime
         */
        public static boolean isPrime(int number){
            for(int i=2; i<number; i++){
                if(number%i == 0){
                    return false; //number is divisible so its not prime
                }
            }
            return true; //number is prime now
        }
        

        【讨论】:

          【解决方案5】:

          这是一种可以做的方法...... 我将限制保持为常数 10。您也可以从用户那里读取它。

          public class PrimeNumberExample {
          
              public static void main(String args[]) {
          
                  //get input till which prime number to be printed
                  System.out.println("Enter the number till which prime number to be printed: ");
                  int limit = 10;//new Scanner(System.in).nextInt();
          
                  //printing primer numbers till the limit ( 1 to 100)
                  System.out.println("Printing prime number from 1 to " + limit);
                  int number = 0;
                  while(true){
                      if(isPrime(++number)){
                          System.out.println(number);
                          if(--limit <= 0)
                              break;
                      }
                  }
          
              }
          
              /*
               * Prime number is not divisible by any number other than 1 and itself
               * @return true if number is prime
               */
              public static boolean isPrime(int number){
                  for(int i=2; i<(number/2); i++){
                      if(number%i == 0){
                          return false; //number is divisible so its not prime
                      }
                  }
                  return true; //number is prime now
              }
          }
          

          【讨论】:

            【解决方案6】:
            public boolean isPrime(long pNo) {
                if(pNo > 9) {
                    long unitDigit = pNo % 10;
                    if(unitDigit == 0 || unitDigit%2 == 0 || unitDigit == 5) {
                        return false;
                    } else {
                        for (long i=3; i < pNo/2; i=i+2) {
                            if(pNo%i == 0) {
                                return false;
                            }
                        }
                        return true;
                    }
                } else if(pNo < 0) {
                    return false;
                }
                else {
                    return pNo==2 || pNo==3|| pNo==5 || pNo==7;
                }
            }
            public int getPrimeNumberCount(long min, long max) {
                int count = 0;
                if(min == max) {
                    System.out.println("Invalid range, min and max are equal");
                } else if(max < min || min < 0 || max < 0) {
                    System.out.println("Invalid range");
                } else {
                    for (long i = min; i <= max; i++) {
                        if (isPrime(i) && i > 0) {
                            // System.out.println(i);
                            count++;
                        }
                    }
                }
                return count;
            }
            

            【讨论】:

              【解决方案7】:

              试试这个,它很容易通过使用 java 8 计算出有多少正在打印的数字是素数!!!

              public static void main(String[] args) {
                      Integer maxVal = 100;
                      IntStream.iterate(2, i -> ++i)
                              .parallel()
                              .filter(i -> !IntStream.rangeClosed(2, i/2).anyMatch(j ->  i%j == 0))
                              .limit(maxVal)
                              .forEach(System.out::println);
                  }
              

              【讨论】:

                猜你喜欢
                • 2019-08-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-07-14
                相关资源
                最近更新 更多