- 素数重数定义为多于一对素数之和。回想一下,素数是一个大于 1 的数,其唯一的除数是 1 和它自己。例如,16 是重质数,因为 16=3+13 和 5+11(请注意,3、5、11 和 13 都是质数)。24 是素数,因为 24 = 5+19、7+17 和 11+13。但是,8 不是重质数,因为 8 = 3+5 但没有其他素数对等于 8。编写一个名为 isPrimeHeavy 的函数,如果它的参数是重质数,则返回 1,否则返回 0。函数签名是 int isPrimeHeavy ( int n) 你可以假设一个名为 isPrime 的函数已经存在,如果它的参数是素数则返回 1。您可以调用此函数,但不必编写它。
我这样做了,但它不能返回一个重质数......只返回一个质数......
public class Prime {
public static boolean isPrimeHeavy(int n) {
if (n <= 1) {
return false;
}
if (n == 2) {
return true;
}
for (int i = 2; i <= Math.sqrt(n) + 1; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static boolean isPrimeHeavy(int n) {
if (n <= 1) {
return false;
}
if (n == 2) {
return true;
}
if (n % 2 == 0) {
return false;
}
for (int i = 3; i <= Math.sqrt(n) + 1; i = i + 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
public class PrimeTest {
public PrimeTest() {
}
@Test
public void testIsPrime() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Prime prime = new Prime();
TreeMap<Long, String> methodMap = new TreeMap<Long, String>();
for (Method method : Prime.class.getDeclaredMethods()) {
long startTime = System.currentTimeMillis();
int primeCount = 0;
for (int i = 0; i < 1000000; i++) {
if ((Boolean) method.invoke(prime, i)) {
primeCount++;
}
}
long endTime = System.currentTimeMillis();
Assert.assertEquals(method.getName() + " failed ", 78498, primeCount);
methodMap.put(endTime - startTime, method.getName());
}
for (Entry<Long, String> entry : methodMap.entrySet()) {
System.out.println(entry.getValue() + " " + entry.getKey() + " Milli seconds ");
}
}
}