ACM题目————数素数

令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

试试证明,预处理很重要!

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;

#define NUM 10004
int primes[NUM];

void findPrimes(){
    int cnt=0;
    int a = 2;
    while (cnt <= NUM) {
        // 排除偶数
        if (a % 2 == 0 && a != 2) {
            ++a;
            continue;
        }

        int i = 0;
        for (i = 0; i < sqrt(cnt); ++i) {
            if (a % primes[i] == 0) {
                break;
            }
        }
        if (i >= sqrt(cnt)) {
            primes[cnt] = a;
            cnt++;

        }
        ++a;
    }
    
}
int main(){
    findPrimes();
    int m,n;
    cin >> m >> n;
    for(int i = m; i <= n; ++i){
        
        cout << primes[i-1];
        if ((i-m+1) % 10 == 0 || i == n) {
            printf("
");
        }else{
            printf(" ");
        }
        
    }
} 
低调做人,高调做事。
原文地址:https://www.cnblogs.com/Asimple/p/5577952.html