码迷,mamicode.com
首页 > 其他好文 > 详细

1013 数素数

时间:2020-02-15 21:47:48      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:col   else   iostream   std   span   printf   math   ash   pac   

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

第一种,就是在第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;
}

 

1013 数素数

标签:col   else   iostream   std   span   printf   math   ash   pac   

原文地址:https://www.cnblogs.com/keep23456/p/12313801.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!