素數打表優化

HDU 4548 
美素數
Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 8049    Accepted Submission(s): 2771


Problem Description
  小明對數的研究比較熱愛,一談到數,腦子裏就涌現出好多數的問題,今天,小明想考考你對素數的認識。
  問題是這樣的:一個十進制數,如果是素數,而且它的各位數字和也是素數,則稱之爲“美素數”,如29,本身是素數,而且2+9 = 11也是素數,所以它是美素數。
  給定一個區間,你能計算出這個區間內有多少個美素數嗎?


Input
第一行輸入一個正整數T,表示總共有T組數據(T <= 10000)。
接下來共T行,每行輸入兩個整數L,R(1<= L <= R <= 1000000),表示區間的左值和右值。


Output
對於每組數據,先輸出Case數,然後輸出區間內美素數的個數(包括端點值L,R)。
每組數據佔一行,具體輸出格式參見樣例。


Sample Input
3
1 100
2 2
3 19


Sample Output
Case #1: 14
Case #2: 1
Case #3: 4
有感而發 對素數打表進行優化

#include<stdio.h>
#include<iostream.h>
#include<time.h>
#include<math.h>
#define N 1000005
int  main()
{
   clock_t start,finish;
   double totaltime;
   start=clock();


    bool  prime[N];
    int i,j;

    for(i=0; i<=N/2;i++)//把奇數存入數組
        prime[i]=true;
    for(i=0;i<=(int)sqrt(N/2);i++)
        for(j=i+2*i+3; j<=N/2;j+=2*i+3)//a[3],a[6],a[9]...都不是素數         
                prime[j]=false;
     for(i=0; i<=N/2; i++)//數組存的是素數
      if(prime[i])
   totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
   cout<<"\n此程序的運行時間爲"<<totaltime<<"秒!"<<endl;
    return 0;
}
發佈了29 篇原創文章 · 獲贊 8 · 訪問量 3774
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章