1013 数素数

我做这题使用了两种方法。

第一种,就是在第N到第M个素数的范围内,一边判断是否是素数,一边输出。

#include"iostream"
#include"cmath"
using namespace std;

bool isPrime(int n) {//判断是否是素数
    if(n <= 1) return false;
    int t = sqrt(n);
    for(int i = 2; i <= t; ++i)
        if(n%i == 0) return false;
    return true;
}

int main() {
    int M,N;
    scanf("%d%d",&M,&N);
    int ans = 0;
    for(int i = 2; ; ++i) {
        if(isPrime(i) == true) {
            ++ans;
            if(ans >= M && ans <= N) {
                printf("%d",i);
                if(ans == N) break;
                if((ans-M) % 10 == 9) printf("\n");
                else printf(" ");
            }
        }
    }
    return 0;
}

 

第二种,就是先用筛素数法得到素数表,然后再把第N到第M个之间的素数输出。(这里的素数表一定要大于105000,不然测试点4过不了)

#include"iostream"
#include"algorithm"
using namespace std;

int prime[105000] = {0},num = 1;
bool hashtable[105000] = {false};
void findPrime() { //筛素数
    for(int i = 2; i < 105000; ++i) {
        if(hashtable[i] == false) prime[num++] = i;
        for(int j = i+i; j < 105000; j+=i)
            hashtable[j] = true;
    }
}
int main() {
    findPrime();
    int m,n;
    cin>>m>>n;
    if(m > n) swap(m,n);
    for(int i = m; i <= n; ++i) {
        cout<<prime[i];
        if(i == n) break;
        else if((i-m) % 10 == 9) printf("\n");
        else printf(" ");
    }
    return 0;
}

 

posted @ 2020-02-15 21:28  tangq123  阅读(164)  评论(0编辑  收藏  举报