1013 数素数

Posted keep23456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("
");
                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("
");
        else printf(" ");
    }
    return 0;
}

 

以上是关于1013 数素数的主要内容,如果未能解决你的问题,请参考以下文章

pat(B) 1013. 数素数

1013. 数素数 (20)

1013 数素数

1013 数素数 (20 分)

PAT乙级1013.数素数

1013 数素数