问题
两素数之差为2,则称该两素数为双胞胎数。求出[2,300]内:
所有素数并保存到文件prime.txt中;有多少对双胞胎数;最大的一对双胞胎数。
分析
首先脑子里要有文件操作的框架,
其次要知道素数怎么求。这里仅给出一种求素数的方法:就是判断n是否可以被n\sqrt nn整除,
然后在找出的素数中找其他数,就很简单了。
代码
#include <stdio.h>#include <math.h>#define N 300int prime(int n){//判断素数int k,i;k = sqrt(n);for(i=2;i<=k;i++)if(n%i==0)//如果n被i整除,终止内循环,此时i<k+1break;if(i>=k+1)//若i≥k+1,表示n未曾被整除return 1;//应确定n是素数else return 0;}int main(){int n,l,m=0,h[N],j=0,p=0,x=0,y=0,o[N];FILE *fp;fp = fopen("prime.txt","w");for(n=2;n<=300;n++) {//遍历2~300对每个n进行判定l = prime(n);if(l) {h[j] = n;j++;fprintf(fp, "%d\t", n);//将找到的素数写入文件m++;//m用来在文件中控制换行,一行输入10个素数if(m%10==0)//m累计到10的倍数,换行fprintf(fp,"\n");}}int aj = 0;for(j=0;j<=300;j++)//找出双胞胎数if(h[j+1]-h[j]==2) {aj = j;//最大双胞胎数所对应的下标p++;//统计有几对双胞胎数}printf("%d,%d\n",h[aj],h[aj+1]);printf("%d对\n",p);fclose(fp);return 0;}
结果
prime.txt
2357111317192329313741434753596167717379838997101103107109113127131137139149151157163167173179181191193197199211223227229233239241251257263269271277281283293