java中的重质数

时间:2012-07-30 12:40:53

标签: java

  1. 主要数字被定义为多于一对素数之和的数字。回想一下,素数是一个大于1的数,其唯一的除数是1和它本身。 例如,16是素数较重,因为16 = 3 + 13和5 + 11(注意3,5,11和13都是素数)。因为24 = 5 + 19,7 + 17和11 + 13,所以24是重的。然而,8不是素数较重,因为8 = 3 + 5但没有其他素数总和为8。 编写一个名为isPrimeHeavy的函数,如果其参数为prime heavy,则返回1,否则返回0。 功能签名是 int isPrimeHeavy(int n) 您可以假设名为isPrime的函数已存在,如果其参数为素数,则返回1。您可以调用此函数,但不必编写它。
  2. 我这样做了但是它无法返回一个重要的素数......只能返回一个素数......

    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 ");
            }
        }
    }
    

3 个答案:

答案 0 :(得分:5)

你可以使用一个循环来尝试所有可能的第一个值,你可以计算第二个,当你发现有多个对时,返回1,否则返回0。

我已经给了你很多提示,因为它的数学真的不是编程。你会在Project Euler找到这样的问题。恕我直言你不应该被要求知道如何解决数学问题,除非你被雇用担任数学角色,但如果你是一名专业开发人员,你应该能够编写代码。

答案 1 :(得分:1)

if((argument % 2 == 0 && argument > 12) || argument == 10) {
    return 1;
} else {
    return 0;
}

答案 2 :(得分:0)

public class Prime {

    public static boolean isPrimeHeavy(int n) {
        if (n % 2 != 0) {
            return false;
        }
        int found = 0;
        for (int i = n-3; i >= (n/2); i -= 2) {
            if (isPrime(i) && isPrime(n - i)) {
                found++;
                if (found == 2)
                    return true;
            }
        }
        return false;
    }
}