欧拉工程第27题:Quadratic primes

题目链接:https://projecteuler.net/problem=27
n² + an + b, where |a| < 1000 and |b| < 1000
对上面的表达式,连续的输入0–n,求能产生最多素数的a和b,让求得是a*b
思路:
1.暴力破解
注意:
1.第一个素数是b,b一定大于零,而且是素数
2.以后的数也必须要判断大于零,不然错的找不到原因

package projecteuler21to30;

import java.util.Date;
class level27{
    void solve(){
        int length=0;
        int n=0;
        int ab=0;
        for(int a=-999;a<=999;a++){
            for(int b=1;b<=999;b++){
                 n=0;
                int num=n*n+n*a+b;
                while(isPrime(num) && num>0 ){
                    n++;
                    num=n*n+n*a+b;
                }
                if(n>length){
                    length=n;
                    ab=a*b;
// System.out.println(ab+","+a+","+b+","+length);
                }
            }
        }
        System.out.println(ab+","+length);
         n=0;
        int num=n*n+n*(-61)+971;
        while(isPrime(num) && num>0 ){
            n++;
            System.out.print(num+" ");
            num=n*n+n*(-61)+971;
        }
        System.out.println(n);
    }

    boolean isPrime(int num){
        for(int i=2;i<=Math.sqrt(num);++i){
            if(num%i==0){
                return false;
            }
        }
        return true;
    }
}
public class Problem27 {

    public static void main(String[] args){
        Date beginTime=new Date();
        new level27().solve();//-59231
        Date endTime=new Date();
        long Time = endTime.getTime()-beginTime.getTime();
        System.out.println("Time:"+Time/1000+"秒"+Time%1000+"毫秒");
        }
}

上面程序对b没有判定是不是素数。

你可能感兴趣的:(java,素数,欧拉工程)