Java 027. 二次质数

本文探讨了通过特定的二次公式连续生成素数的问题,并给出了一组系数a和b,它们能够使公式从n=0开始连续产生最多素数。文章还提供了用于验证素数及计算最优系数的Java代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二次质数
在这里插入图片描述

欧拉发现了著名的二次公式: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());
    }

程序运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值