算法学习——枚举之基于素数的代数和

2021-06-28 05:06

阅读:410

标签:pre   orm   [1]   exti   for   算法思路   sqrt   素数   ret   

算法描述

基于素数的代数和

s(n) = (1/3)-(3/5)-(5/7)+(7/9)+...+(2n-1)/(2n+1)

分子与分母中有且只有一个素数时符号取+ 分子与分母都不是素数或者都是素数,则前面的符号取-

1.求s(2016)

2.设1

3.设1

算法思路

  1. 设置一个二维数组存放数值

    a[i][1]存放2i+1

    a[i][0]存放0或1

    如果2i+1是素数,则存放0,不为素数,则存放1

    比如a[3][1]=7 a[3][0]=1

  2. 当分子与分母只有一个是素数的时候,a[i][0]+a[i+1][0]=1,取+,不是的话,则取-。以此为条件,可以计算s(n)的值

  3. 求最大值,我们只需要在每次s(n)加或减之后进行一次判断,若s大于Max,则交换数值,第k项可以由公式a[i][0]=2i-1求得i,也就是k = (a[i][0]+1)/2

  4. 求最接近0的数值,需要判断,绝对值是否为最小,求绝对值可以使用Math.abs(double s)方法

算法实现

    Scanner scnner = new Scanner(System.in);
    int n = scnner.nextInt();
    scnner.close();
    int[][] a = new int[2*n+1][2];
    for(int j=0,i=1;imax){
            max =s;
            k1 = (a[i+1][1]-1)/2;
        }
        if(Math.abs(s)

结果

技术分享图片

算法学习——枚举之基于素数的代数和

标签:pre   orm   [1]   exti   for   算法思路   sqrt   素数   ret   

原文地址:https://www.cnblogs.com/kexing/p/9650214.html


评论


亲,登录后才可以留言!