- 重い素数は、複数の素数のペアの合計であると定義されます。素数とは、約数が 1 とそれ自体だけである 1 より大きい数であることを思い出してください。たとえば、16=3+13 および 5+11 であるため、16 は素数が重いです (3、5、11、および 13 はすべて素数であることに注意してください)。24 = 5+19、7+17、11+13 であるため、24 はプライム ヘビーです。ただし、8 = 3+5 であるため、合計が 8 になる素数のペアは他にないため、8 は素数重ではありません。 isPrimeHeavy という名前の関数を作成し、引数が素数重の場合は 1 を返し、それ以外の場合は 0 を返します。関数のシグネチャは int isPrimeHeavy ( int n) 引数が素数の場合に 1 を返す isPrime という名前の関数が既に存在すると想定することができます。この関数を呼び出すことはできますが、記述する必要はありません。
私はこれをしましたが、重い素数を返すことはできません.素数を返すだけです...
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 ");
}
}
}