【问题标题】:Whats the built in function that Finds next largest prime number in java?在java中查找下一个最大素数的内置函数是什么?
【发布时间】:2011-10-03 00:53:50
【问题描述】:

Java API 是否提供了在给定输入 x 的情况下计算下一个最大素数的函数?

【问题讨论】:

  • 直到你写一个。
  • 我想由 Sun / Oracle 的某个人来开发这个;测试它;对其进行质量检查;代码审查它;记录它;并翻译文件;对于很少使用的东西;会浪费钱。
  • 你的iphone和这个问题有什么关系?
  • 该死!好的,谢谢!
  • 它在数学包中。 Math.completeHomeWorkAssignment(CS101Assignment assignment);

标签: java primes


【解决方案1】:

是的,真的没有这个功能!

【讨论】:

    【解决方案2】:

    这将是一个非常深奥的方法,并不是真正适合包含在通用类库中的候选者。您需要自己编写,使用testsieve

    【讨论】:

    • 筛子用于查找所有 小于 的素数 - 在这种情况下使用测试 :)
    • 当然可以,但是您始终可以first生成最多N个素数,然后“下一个”(N以下)变得微不足道。 :)
    • 为什么会是深奥的?为什么它不是图书馆的“伟大”候选人?为什么JDK中有一个方法可以做到这一点? BigInteger.nextProbablePrime()。我认为你没有给出正确的答案,我确信你没有给出解决方案。
    【解决方案3】:

    BigInteger.nextProbablePrime() 可能适合您使用大整数。否则,您可以轻松编写自己的代码。这是我之前准备的:

    static long nextPrime(long previous) {
      if (previous < 2L) { return 2L; }
      if (previous == 2L) { return 3L; }
      long next = 0L;
      int increment = 0;
      switch ((int)(previous % 6L)) {
        case 0: next = previous + 1L; increment = 4; break;
        case 1: next = previous + 4L; increment = 2; break;
        case 2: next = previous + 3L; increment = 2; break;
        case 3: next = previous + 2L; increment = 2; break;
        case 4: next = previous + 1L; increment = 2; break;
        case 5: next = previous + 2L; increment = 4; break;
      }
      while (!isPrime(next)) {
        next += increment;
        increment = 6 - increment;   // 2, 4 alternating
      }
      return next;
    }
    

    这使用 2、4 轮来跳过 2 和 3 的倍数。您将需要一个主要的测试方法:

    boolean isPrime(long toTest) { ... }
    

    如果它的参数是素数则返回true,否则返回false

    【讨论】:

    • 这不是解决方案吗?这篇文章中的每个人都说没有获得素数的方法 - 但是有。 BigInteger.nextProbablePrime() 就像 rossum 说的那样。人们在取笑这个问题,说你应该自己做作业,但他们甚至不知道答案。
    【解决方案4】:
    public class nextprime {
    
      public static void main(String args[]) {
        int count = 0;
        int n = 17;
        for (int i = 2; i <= n / 2; i++) {
            if (n % i == 0) {
                count++;
    
            }
        }
        if (count == 0) {
            System.out.println("prime");
            for (int p = n + 1; p >0; p++) {
                int y=0;
                for (int i = 2; i <= p / 2; i++) {
                    if (p % i == 0) {
                        y++;
    
                    }
                }
                if(y==0)
                {
                    System.out.println("Next prime "+p);
                    break;
                }
            }
        } else {
            System.out.print("not prime");
        }
      }
    

    }

    【讨论】:

    • 据我所知,这将首先确定 17 确实是素数,而不是低效地确定 18 不是然后确定 19 是。
    【解决方案5】:

    来自Apache Commons MathPrimes.nextPrime(int n) 是您所需要的。

    【讨论】:

      【解决方案6】:

      Java java.math.BigInteger 类包含一个方法 nextProbablePrime () 来检查数字的素数。

      import java.math.BigInteger;
      
      public class NextPrime {
      
                  public static void main(String[] args) {
                              int number = 83;
                              Long nextPrime = nextPrime(number);
                              System.out.println(nextPrime + " next prime to " + number);
      
                  }
      
                  /**
                   * method to find next prime
                   * @param number
                   * @return boolean
                   */
                  private static Long nextPrime(int number) {
                              BigInteger bValue = BigInteger.valueOf(number);
      
                              /**
                               * nextProbablePrime method used to generate next prime.
                               * */
                              bValue = bValue.nextProbablePrime();
      
                              return Long.parseLong(bValue.toString());
                  }
      }
      

      输出: 89 到 83 的下一个素数

      更多信息请看我的博客:
      http://javaexplorer03.blogspot.in/2016/05/generate-next-prime-of-number-in-java.html

      【讨论】:

        猜你喜欢
        • 2022-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多