美文网首页
1013数素数

1013数素数

作者: advanced_slowly | 来源:发表于2019-09-29 17:56 被阅读0次

    问题描述:
    令 Pi表示第 i 个素数。现任给两个正整数 M≤N≤10^4,请输出 P
    ​M到 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

    我的实现如下:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int M, N;
        cin >> M >> N;
        if (M > 10000 || N > 10000 || M <= 0 || N <= 0)
        {
            return -1;
        }
        int circleCount = 0;    //素数计数
        int numCount = 0;       //从第M个素数开始计数
        for (int i = 2 ; i <= 10000 ; i++)
        {
            int j;
            for (j = 2 ; j < i ; j++)
            {
                if ((i % j) == 0)
                {
                    break;
                }
            }
            if (j == i)
            {
                circleCount++;
                if (circleCount == N)
                {
                    cout << i;
                    break;
                }
                else if (circleCount >= M && circleCount < N)
                {
    
                    cout << i;
                    numCount++;
                    if ((numCount % 10) == 0)
                    {
                        cout << endl;
                    }
                    else
                    {
                        cout << " ";
                    }
                }
            }
        }
        return 0;
    }
    

    或者呢,将2到10000的素数都存储进一个大数组种,然后遍历第M个到第N个元素。

    #include <iostream>
    
    using namespace std;
    int main()
    {
        int M, N;
        cin >> M >> N;
        int results[4088] = {0};
        int circleCount = 0;
        for (int i = 2 ; i <= 10000 ; i++)
        {
            int j;
            for (j = 2 ; j < i ; j++)
            {
                if ((i % j) == 0)
                {
                    break;
                }
            }
            if (i == j)
            {
                results[circleCount] = i;
                circleCount++;
            }
        }
        for (int i = M - 1; i <= N - 1 ; i++)
        {
            cout << results[i];
            if ((i + 1 - M + 1) % 10 == 0 || i == N - 1)
            {
                cout << endl;
            }
            else
            {
                cout << " ";
            }
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:1013数素数

          本文链接:https://www.haomeiwen.com/subject/rhzyyctx.html