【C語言習題】兩素數之差爲2,則稱該兩素數爲雙胞胎數。求出[2,300]內雙胞胎數。

問題

兩素數之差爲2,則稱該兩素數爲雙胞胎數。求出[2,300]內:

  1. 所有素數並保存到文件prime.txt中;
  2. 有多少對雙胞胎數;
  3. 最大的一對雙胞胎數。

分析

首先腦子裏要有文件操作的框架,
其次要知道素數怎麼求。這裏僅給出一種求素數的方法:就是判斷n是否可以被n\sqrt 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	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章