39:第n小的質數
總時間限制: 1000ms 內存限制: 65536kB
描述
輸入一個正整數n,求第n小的質數。
輸入
一個不超過10000的正整數n。
輸出
第n小的質數。
樣例輸入
10
樣例輸出
29
方法一:老實枚舉計數尋找到第n個質數然后輸出。
1 #include<stdio.h> 2 #include<math.h> 3 int main(int argc, char *argv[]) 4 { 5 long i,n,count; 6 long j,flag,t; 7 scanf("%d",&n); //需要尋找第n個質數 8 count=0; //已經尋找到count個 9 10 i=2; 11 //i從2開始逐漸增大。依次判斷i的值是否是質數並計數 12 while(count<n) 13 { 14 //判斷i是否質數 15 j=2;flag=0;t=sqrt(i); 16 while(j<=t) 17 { 18 if(i%j==0) 19 { 20 flag=1; 21 break; 22 } 23 j++; 24 } 25 //如果i是質數,count計數器加1 26 if(flag==0) count++; 27 i++;//准備判斷下一個數 28 } 29 printf("%d\n",i-1); 30 return 0; 31 }
方法二:離線計算,先打印出10000質數存到數組中,然后……呵呵
把上面的代碼稍微修改一下,用來生成質數並輸出到文件里面:

1 #include<stdio.h> 2 #include<math.h> 3 int main(int argc, char *argv[]) 4 { 5 long i,n,count; 6 long j,flag,t; 7 freopen("39.out","w",stdout); 8 //scanf("%d",&n); //需要尋找第n個質數 9 n=10003; 10 count=0; //已經尋找到count個 11 12 i=2; 13 //i從2開始逐漸增大。依次判斷i的值是否是質數並計數 14 while(count<n) 15 { 16 //判斷i是否質數 17 j=2;flag=0;t=sqrt(i); 18 while(j<=t) 19 { 20 if(i%j==0) 21 { 22 flag=1; 23 break; 24 } 25 j++; 26 } 27 //如果i是質數,count計數器加1 28 if(flag==0) 29 { 30 count++; 31 printf("%d,",i); 32 } 33 i++;//准備判斷下一個數 34 } 35 //printf("%d\n",i-1); 36 return 0; 37 }
然后復制文件當中的數據到代碼里面構造數組嘿嘿嘿
1 #include <stdio.h> 2 int main(int argc, char *argv[]) 3 { 4 long a[10003]= 5 { //為了網頁打開速度快一點,不寫完數據了呵呵 6 2,3,5,7,11,13,17,19,23,29,31,…… 7 }; 8 int n; 9 scanf("%d",&n); 10 printf("%d\n",a[n-1]); 11 return 0; 12 }
嗯,投機取巧了呵呵