PAT乙级1013——数素数

题目:

题目详情 - 1013 数素数 (20 分) (pintia.cn)

 

思路:既然要输出第M个素数和第N个素数中间的所有素数,那么我们先将前N个素数全部求出来,存储到一个数组中,然后输出这个数组的第M到第N个元素

这道题要注意的是输出的格式,我真的调了好久!

下面是AC的代码:

#include <iostream>
#include <cmath>
int IsPrime(int n)  //判断n是否是素数 
{
    if (n==2)
    {
        return 1;    //2是素数,return true
    } 
    else
    {
        int i;
        for (i=2;i<=sqrt(n);i++)
        {
            if (n%i==0)
            {
                return 0; //不是素数 
            }
        }
    }
    return 1;
} 
int main()
{
    using namespace std;
    int M,N;
    cin>>M>>N;
    int arr[N+1];  //浪费一个位置,第一个位置不用,为了方便计数 
    int n=2;
    int i=1; //计数,数组里存储了多少素数 
    while (i<=N)
    {
        int judge=IsPrime(n);
        if (judge)  //说明n是素数
        {
            arr[i]=n;
            i++;
         } 
        n++;    
    }
    //下面是输出 
    int l=1;
    for (int j=M;j<=N;j++)  //输出M位到N位之间的素数 
    {
        if (l!=10)
        {
            if (j!=N)
                cout<<arr[j]<<' ';    
            else
                cout<<arr[j];
            l++;
        }
        else
        {
            if (j!=N)
                cout<<arr[j]<<endl;
            else
                cout<<arr[j];
            l++;
        }
        if (l==11)
            l=1;
    }
    return 0;
}

再贴另一个的答案:PAT乙级1013 - 臭咸鱼 - 博客园 (cnblogs.com)

原来不用数组也可以?不过其实思路都是一样的

posted @ 2021-12-10 16:38  EowynTang  阅读(56)  评论(0)    收藏  举报