// algebraicSumOfPrime.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <math.h>
#include <string.h>
bool isPrime(int num)
{
if(num<=1)return false;
if(num==2)return true;
if(num%2==0)return false;
//下面检验大于2的奇数
for(int i=3;i<=sqrt(num);i+=2)
{
if(num%i==0)
return false;
}
return true;
}
int main(int argc, char* argv[])
{
int n,k,k1,k2,a[3000];
double s,s2,smax,mi;
printf("输入整数n(<3000):");
scanf("%d",&n);
getchar();
memset(a,0,sizeof(a));
for(k=2;k<=n+1;k++)
{
if(isPrime(2*k-1))
a[k]=1;
}
s=0;smax=0;mi=10;
for(k=1;k<=n;k++)
{
if(a[k]+a[k+1]==1)
s+=(double)(2*k-1)/(double)(2*k+1);
else
s-=(double)(2*k-1)/(double)(2*k+1);
if(s>smax)
{
smax=s;
k1=k;
}
if(fabs(s)<mi)
{
mi=fabs(s);
k2=k;
s2=s;
}
}
//
printf("s(%d)=%.5lf \n",n,s);
printf("当k=%d 时 s有最大值:%.5lf \n",k1,smax);
printf("当k=%d 时 s=%.5lf 最接近0.\n",k2,s2);
return 0;
}