1013. 數素數 (20)


題目描述:

    

令Pi表示第i個素數。現任給兩個正整數M <= N <= 104,請輸出PM到PN的所有素數。

輸入格式:

輸入在一行中給出M和N,其間以空格分隔。

輸出格式:

輸出從PM到PN的所有素數,每10個數字占1行,其間以空格分隔,但行末不得有多余空格。

輸入樣例:

5 27

輸出樣例:

11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103

思路:
  運用素數篩法選出一萬個素數並將他們存入數組primeArr[];
  遍歷輸出primeArr[M-1]到primeArr[N-1]的所有素數
  輸出格式注意10的整數倍沒有空格&&末尾數字primeArr[N-1]無空格
#include<stdio.h>
#include<math.h>
#define M 110001
//必須保證M的數值范圍符合題目中所述的第一萬個素數,否則會出現段錯誤,即數組內存不足 
int Array[M];
int primeArray[M];
void searchPrime()
{
    int tmp = (int)sqrt(M)+1;
    for(int i=2; i<tmp; i++)
    {
        if(Array[i] == 1)
            continue;
        for(int j=i*i; j<M; j+=i)
        {
            Array[j] = 1;
        }
    }
    
    int cnt = 0;
    for(int i=2; i<M; i++)
    {
        if(Array[i] == 0)
            primeArray[cnt++] = i;
    }
    
}
int main()
{
    int m;
    int n;
    scanf("%d%d",&m,&n);
    searchPrime();
    for(int i=m-1,cnt = 1; i<n; i++)
    {
        if(cnt%10 == 0)
            printf("%d\n",primeArray[i]);
        
        else if(i == n-1)
            printf("%d",primeArray[i]); 
        else
        printf("%d ",primeArray[i]);
        cnt++;
    }
        
//    test
//    printf("第一萬個素數:%d",primeArray[9999]);
    
    return 0;
    
 } 

 



  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM