27 Quadratic primes - Project Euler

来源:互联网 发布:js foreach遍历数组 编辑:程序博客网 时间:2024/05/20 10:20
package xxx.xxx.xxx;


import java.util.ArrayList;
import java.util.Arrays;


/*
 * Euler discovered the remarkable quadratic formula:n² + n + 41
 * It turns out that the formula will produce 40 primes for the consecutive values n = 0 to 39.
 * However, when n = 40, 402 + 40 + 41 = 40(40 + 1) + 41 is divisible by 41, and certainly when n = 41, 41² + 41 + 41 is clearly divisible by 41.
 * The incredible formula  n² − 79n + 1601 was discovered, which produces 80 primes for the consecutive values n = 0 to 79.
 * The product of the coefficients, −79 and 1601, is −126479.
 * Considering quadratics of the form:
 * n² + an + b, where |a| < 1000 and |b| < 1000
 * where |n| is the modulus/absolute value of n
 * e.g. |11| = 11 and |−4| = 4
 * Find the product of the coefficients, a and b, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n = 0.
 */
public class QuadraticPrimes1 {


private void compute(int aRange, int bRange) {
ArrayList<Integer> temp = new ArrayList<Integer>(Arrays.asList(0, 0, 0, 0));


for (int b = 1; b < bRange; b++) {
int aMin = Math.max(-aRange + 1, -b);
for (int a = aMin; a < aRange; a++) {
if (temp.get(0)<this.func(a, b).get(0)) {
temp = this.func(a, b);
}
}
}
System.out.println(temp);
}


private ArrayList<Integer> func(int a, int b) {
ArrayList<Integer> temp = new ArrayList<Integer>();
int n = 0;
label: while (n >= 0) {
/*
* int y = n*n+a*n+b; for(int i = 2; i<y; i++){ if(y%i==0){ break
* label; } }
*/
int y = n*n+a*n+b;
for (int i = 2; i < Math.abs(y); i ++) {
if (y <= 0 || y%i == 0) {
temp.add(n);
temp.add(a*b);
return temp;
}
}
n++;
}


return temp;
}


private void verify(int a, int b) {
int n = 0;
}


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
long startTime = System.currentTimeMillis();
QuadraticPrimes1 q = new QuadraticPrimes1();
q.compute(1000, 1000);
long endTime = System.currentTimeMillis();
System.out.println("execution time " + (endTime - startTime + "ms"));
}


}
0 0
原创粉丝点击