1013 数素数 (C和C++版本)

思路:

  1. 预先在容器(数组)中存入一万个素数。
  2. 输入素数序列的范围m~n,从容器中依次输出。
  3. 每十个输出换行,否则(当不是第n个素数时)输出空格串

 

C++:

#include <iostream>
#include <vector>

using namespace std;

#define N 10000//这里N的大小指素数个数

vector<int> func() {//将一万个素数存入进容器
    int n = N;
    vector<int> vec = { 2, 3 };
    for(int m = 5; n > 0; ++m)
        for (int i = 2; i * i <= m; ++i) {
            if (m % i == 0)
                break;
            if ((i + 1) * (i + 1) > m) {
                vec.push_back(m);
                --n;
                break;
            }
        }
    return vec;
}

int main()
{
    vector<int> ivec;

    ivec = func();//获取素数组

    int m, n, ncount = 0;
    cin >> m >> n;
    for (int i = m; m <= n; ++m) {//输出容器中第m~n个素数
        cout << ivec[m - 1];
        ++ncount;
        if (ncount % 10 == 0) {//十个素数一行,末尾输出换行
            cout << endl;
        }
        else {
            if(m + 1 <= n)//非末尾且非第n个素数
                cout << " ";//输出空格串
        }

    }

    return 0;
}

 

C

#include <stdlib.h>
#include <stdio.h>

#define N 10000//这里N的大小指素数个数
//#pragma warning(disable:4996)

void func(int *arr) {//将一万个素数存入进容器
    int n = 2, m, i;
    arr[0] = 2;
    arr[1] = 3;
    for(m = 5; n < N; ++m)
        for (i = 2; i * i <= m; ++i) {
            if (m % i == 0)
                break;
            if ((i + 1) * (i + 1) > m) {
                arr[n] = m;
                ++n;
                break;
            }
        }
}

int main(void)
{
    int arr[N], i;

    func(arr);//获取素数组

    int m, n, ncount = 0;
    scanf("%d%d", &m, &n);
    for (i = m; m <= n; ++m) {//输出容器中第m~n个素数
        printf("%d", arr[m - 1]);
        ++ncount;
        if (ncount % 10 == 0) {//十个素数一行,末尾输出换行
            printf("\n");
        }
        else {
            if(m + 1 <= n)//非末尾且非第n个素数
                printf(" ");//输出空格串
        }

    }

    return 0;
}

 

posted @ 2018-11-28 14:18  Hk_Mayfly  阅读(518)  评论(0)    收藏  举报