Programming Ability Test学习 1013. 数素数 (20)

1013. 数素数 (20)

时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

令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

提交代码

 

解题思路:申请一个很大的数组,如果数组下标是素数,则数组为1,否则为0。要注意的是申请多大的数组,第一万个素数是104729,则申请a[105000];

 

 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm> 
#define MAXSIZE 105000

using namespace std;


//判断是不是素数 
bool JudgePrime(int N);


 

int main()
{
    int a[MAXSIZE]; 
    a[0]=0;
    a[1]=0;
    for(int i=2;i<MAXSIZE;i++)
    {
        if(JudgePrime(i)==true)a[i]=1;
        else a[i]=0;
    }
    int N1,N2;
    cin>>N1>>N2;
    
    int j,k;j=k=0;
    for(int i=0;i<MAXSIZE;i++)
    {
        if(a[i]==1)
        {
            j++;//用来记录第几个素数 
            if(j>=N1&&j<=N2){
            k++;//用来记录第N1个素数和第N2的素数之间的素数个数    
            cout<<i;
            if(k%10==0)cout<<endl;
            else //考虑最后一行不足10个元素但仍需要换行 
             {
                    if(k==N2-N1+1)cout<<endl;
                    else cout<<" "; 
             }
            }
        }
    }
    return 0;
}


bool JudgePrime(int N)
{
    int j;
    for(j=2;j<=sqrt(N);j++)
    {
        if(N%j==0){
          return false;
          break;
        }
    }
    if(j>sqrt(N))
    return true;
}
View Code

 

posted @ 2015-09-02 15:14  GGRoddick  阅读(229)  评论(0编辑  收藏  举报