程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 孿生素數問題

孿生素數問題

編輯:C++入門知識

孿生素數問題 時間限制:3000 ms  |  內存限制:65535 KB 難度:3 描述 寫一個程序,找出給出素數范圍內的所有孿生素數的組數。一般來說,孿生素數就是指兩個素數距離為2,近的不能再近的相鄰素數。有些童鞋一看到題就開始寫程序,不仔細看題,咱們為了遏制一下讀題不認真仔細的童鞋,規定,兩個素數相鄰為1的也成為孿生素數。  輸入 第一行給出N(0<N<100)表示測試數據組數。 接下來組測試數據給出m,表示找出m之前的所有孿生素數。 (0<m<1000000) 輸出 每組測試數據輸出占一行,該行為m范圍內所有孿生素數組數。 樣例輸入 1 14樣例輸出 4    [cpp]  /*********************************    *    日期:2013-3-14   *    作者:SJF0115    *    題號: 南陽理工 題目26: 孿生素數問題   *    來源:http://acm.nyist.net/JudgeOnline/problem.php?pid=26   *    結果:AC    *    來源:   *    總結:   **********************************/   #include<stdio.h>    #include<math.h>       int prime[1000001];   //素數表    int Primes(int n){       int i,j;       for(i = 1;i <= n;i++){           //偶數            if(i % 2 == 0){               prime[i] = 0;           }           //奇數            else{               prime[i] = 1;           }       }       //奇數的倍數肯定不是素數        for(i = 3;i <= sqrt(n);i+=2){           if(prime[i]){               for(j = i+i;j <= n;j += i){                   prime[j] = 0;               }           }       }       return 0;   }        int main(){       int N,M,count,i;       while(scanf("%d",&N) != EOF){           while(N--){               count = 0;               scanf("%d",&M);               //求素書                Primes(M);               //求孿生素數                for(i = 2;i <= M-2;i++){                   if(prime[i] && prime[i+2]){                       count++;                       //printf("%d %d\n",i,i+2);                    }               }               //兩個素數相鄰為1的也成為孿生素數。這樣的只有一種情況2,3                if(M >= 3){                   count++;               }               printf("%d\n",count);           }       }       return 0;   }     /*********************************   *    日期:2013-3-14  *    作者:SJF0115   *    題號: 南陽理工 題目26: 孿生素數問題  *    來源:http://acm.nyist.net/JudgeOnline/problem.php?pid=26  *    結果:AC   *    來源:  *    總結:  **********************************/ #include<stdio.h> #include<math.h>   int prime[1000001]; //素數表 int Primes(int n){     int i,j;     for(i = 1;i <= n;i++){         //偶數 if(i % 2 == 0){             prime[i] = 0;         } //奇數 else{ prime[i] = 1; }     } //奇數的倍數肯定不是素數 for(i = 3;i <= sqrt(n);i+=2){ if(prime[i]){ for(j = i+i;j <= n;j += i){ prime[j] = 0; } } }     return 0; }    int main(){ int N,M,count,i;     while(scanf("%d",&N) != EOF){ while(N--){ count = 0; scanf("%d",&M); //求素書 Primes(M); //求孿生素數 for(i = 2;i <= M-2;i++){ if(prime[i] && prime[i+2]){ count++; //printf("%d %d\n",i,i+2); } } //兩個素數相鄰為1的也成為孿生素數。這樣的只有一種情況2,3 if(M >= 3){ count++; } printf("%d\n",count); } } return 0; }           注意:   接下來組測試數據給出m,表示找出m之前的所有孿生素數。   但實際上包括m這個數。   測試用例:   m = 7   孿生素數:   2,3   3,5   5,7                  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved