C语言每日一练——第6题
一、题目要求
计算500~800区间素数的个数cnt,并按所求素数的值从大到小的顺序,计算其间隔间的减、加之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数.....的值sum。最后把输出结果保存到out.dat中
二、程序代码
#include <stdio.h> int cnt, sum; int isPrime(int num) { int i; for(i = 2; i <= num / 2; i++) { if(num % i == 0) { return 0; } } return 1; } void countValue() { /* //方法一 int i,j,temp; int sList[300]; for(i=500;i<=800;i++) { if(isPrime(i)) { sList[cnt++]=i; } } for(i=0;i<cnt;i++) { for(j=0;j<cnt-i-1;j++) { if(sList[j]<sList[j+1]) { temp=sList[j]; sList[j]=sList[j+1]; sList[j+1]=temp; } } } sum=sList[0]-sList[1]; for(i=2;i<cnt;i++) { if(i%2==0) { sum+=sList[i]; } else { sum-=sList[i]; } } */ //方法二 int i,k=-1; for(i=800;i>500;i--) { if(isPrime(i)) { cnt++; k*=-1; sum+=k*i; } } } void writeDAT() { FILE *fp; fp = fopen("out.dat", "w"); fprintf(fp, "%d\n%d\n", cnt, sum); fclose(fp); } void main() { cnt = sum = 0; countValue(); printf("素数的个数=%d\n", cnt); printf("按要求计算的值=%d\n", sum); writeDAT(); }
三、程序运行结果