二次质数
欧拉发现了著名的二次公式:n
2
- n + 41,发现这个公式可以对于 0≤n≤39 的整数可以连
续产生四十个素数。
但是,当 n=40,402 - 40 + 41 = 40(40+1)+41 可以被 41 整除;
当 n=41,412 - 41 + 41 显然也可以被 41 整除。
另外一个著名公式是 n
2 − 79n + 1601,可以对 0≤n≤79 的整数连续产生 80 个素数,这个
公式的两个系数−79 和 1601 的乘积是−126479。
考虑如下二次公式:n
2 - an + b |a|<1000 and |b|<1000
求使得以上公式从 n=0 开始连续产生的素数最多的系数 a 与 b 的乘积。
答案:-59231 (最长的是 71 个连续的素数 0≤n≤70 此时 a=-61 b=971)
思路:
函数:1、判断是否是素数 2、判断连续能产生多少素数 3、找到连续产生素数最多的系数
代码如下:
public static boolean prime(int n){
if(n<=1) return false;//0,1,负数都不是素数
for(int i=2;i*i<=n;i++)
if(n%i==0) return false;
return true;
}
public static int num(int a,int b){
int m=0;
for(int i=0;i<1000;i++){
if(prime(i*i+a*i+b)) m++;
else break;
}
return m;
}
public static int max(){
int t=0,t1=0,t2=0;
for(int i=-999;i<1000;i++)
for(int j=-999;j<1000;j++){
if(num(i,j)>t) {
t=num(i,j);
t1=i;
t2=j;
}
}
System.out.println(t);
System.out.println(t1+" "+t2);
return t1*t2;
}
public static void main(String[] args) {
System.out.println(max());
}
程序运行结果: