【例6.10】用下面的公式求π:
分析:首先,系数为正数的项的分母是4n-3(n为正数项的项数),为负数的项的分母为4n-1(n为负数项的项数),即分母的变化规律是1、3、5、7...的奇数数列,则第n项的分母为2n-1,第10000项的分母为2*10000-1。
#include <stdio.h>
#include <math.h>
int main(void)
{
double p=0,j=1;
int i;
for( i=1;i<10000;i++ ) //此处i为项数
{
j=pow(-1.0,i+1)/(2*i-1); //pow(x,y)求x的y次幂
p+=j;
printf("%lf\n",4*p); //输出每一项的值
}
printf("%lf\n",4*p); //输出最终pi值
return 0;
}
i 的值越大,结果越精准,同样计算时间也更长。
注意:经读者反馈,笔者意识到以前提供的例子是错的,上面是更改后的代码,更改时间为 2014-07-06 1:50:34;错误的例子就不提供了。
【例6-11】判断m是否素数。
#include <stdio.h>
#include <math.h>
int main(void){
int m,i,k;
printf("Input your number: ");
scanf("%d",&m);
k=sqrt(m); // m 的开方
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1)
printf("%d is a prime number\n",m);
else
printf("%d is not a prime number\n",m);
return 0;
}
【例6-12】求100至200间的全部素数。
#include <stdio.h>
#include <math.h>
int main(void){
int m,i,k,n=0;
for(m=101;m<=200;m=m+2){
k=sqrt(m); // m 的开方
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1){
printf("%d\n",m);
n=n+1;
}
}
printf("\n");
return 0;
}
注意:经读者 @ahlei、@娄 @IKGROADS、@啊啊、@hi、@小姐” 的反馈,笔者意识到以前提供的例子让人费解,将代码做了修改,就是上面的代码,修改时间为 2014-07-06 02:05:251。下面是老代码:
#include<math.h>
main(){
int m,i,k,n=0;
for(m=101;m<=200;m=m+2){
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1){
printf("%d",m);
n=n+1;
}
if(n%n==0)printf("\n");
}
printf("\n");
}