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;
    
 } 

 



  
posted @ 2016-12-06 21:14  ValarMorghulis  阅读(2119)  评论(0编辑  收藏  举报