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;
}
素數打表優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.