给定数字n,任务是计算其本数。基数(表示为Pn#)是前n个质数的乘积。数字的本数类似于数字的阶乘。在原始数中,并非所有自然数都会相乘,只有素数会相乘才能计算数字的原始数。用P#表示。

例子:

Input: n = 3
Output: 30
Priomorial = 2 * 3 * 5 = 30


附带说明,阶乘为2 * 3 * 4 * 5

Input: n = 5
Output: 2310
Primorial = 2 * 3 * 5 * 7 * 11


我认为解决此问题的方法是:


编写isPrime函数以测试该数字是否为质数。
编写一个可以打印n个素数的函数(int n),
   例如n = 3,然后打印2,3,5三个素数。
将所有素数相乘。


但是,我陷入了第二步。
请帮助我解决此问题,或者如果有更好的方法,请告诉我。

编辑:
以下是我的代码,到目前为止,我只是转到第二步。但是,当我尝试测试countPrime函数时,输出为0。

public class PrimorialNum {

static boolean isPrime(int n) {
    for (int i = 2; i <= Math.sqrt(n); i++) {
        if (n % i == 0) {
            return true;
        }
    }
    return false;
}

static int countPrime(int k) {
    int count = 0;
    int x=0;
    while (x >= 2) {
        if (isPrime(x)) {
            count++;
        }
        x++;
        System.out.println(x);
    }
    return count;
}

public static void main(String[] args) {
    System.out.println(countPrime(2));

}


}

最佳答案

我认为这可能对您有用,现在还没有机会自己尝试。如果k> 0。


isPrime()

static boolean isPrime(int n) {
 for (int i = 2; i < n; i++) {
        if (n % i == 0 && i != n) return false;
    }
return true;
}



2.打印

static void countPrime(int k) {
 int x = 2;
 int primesFound = 0;
 while (primesFound != k) {
  if (isPrime(x)) {
   System.out.print(x);
   primesFound++;
  }
  x++;
 }
}


3.乘

static int countPrime(int k) {
 int count = 2;
 int x = 3;
 int primesFound = 1;
 while (primesFound != k) {
  if (isPrime(x)) {
   count = count * x;
   primesFound++;
  }
  x++;
 }
return count;
}

07-24 09:33