【C语言习题】两素数之差为2,则称该两素数为双胞胎数。求出[2,300]内双胞胎数。

  • Post author:
  • Post category:其他




问题

两素数之差为2,则称该两素数为双胞胎数。求出[2,300]内:

  1. 所有素数并保存到文件prime.txt中;
  2. 有多少对双胞胎数;
  3. 最大的一对双胞胎数。



分析

首先脑子里要有文件操作的框架,

其次要知道素数怎么求。这里仅给出一种求素数的方法:就是判断n是否可以被



n

\sqrt n













n


























整除,

然后在找出的素数中找其他数,就很简单了。



代码

#include <stdio.h>
#include <math.h>
#define N 300
int prime(int n){		//判断素数
    int k,i;
    k = sqrt(n);		
    for(i=2;i<=k;i++)
        if(n%i==0)		//如果n被i整除,终止内循环,此时i<k+1
            break;
    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

2	3	5	7	11	13	17	19	23	29	
31	37	41	43	47	53	59	61	67	71	
73	79	83	89	97	101	103	107	109	113	
127	131	137	139	149	151	157	163	167	173	
179	181	191	193	197	199	211	223	227	229	
233	239	241	251	257	263	269	271	277	281	
283	293	



版权声明:本文为Toufahaizai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。