列表

详情


OR72. 求素数

描述

输入M、N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数。素数定义:除了1以外,只能被1和自己整除的自然数称为素数

输入描述

两个整数M,N

输出描述

区间内素数的个数

示例1

输入:

2 10

输出:

4

原站题解

C++ 解法, 执行用时: 4ms, 内存消耗: 1272KB, 提交时间: 2020-10-31

#include <iostream>
#include <cstring>
using namespace std;
#define N 1000001
bool table[N];
int main(){
    memset(table,true,sizeof(table));
    table[0]=table[1]=false;
    for(int i=4;i<=N;i+=2)
        table[i]=false;
    for(int i=3;i*i<=N;i+=2){
        if(table[i]){
            for(int j=i*i;j<=N;j+=2*i){
                table[j]=false;
            }
        }
    }
       
    int m,n;
    cin>>m>>n;
    int cnt=0;
    for(int i=m;i<=n;i++){
        if(table[i])
            cnt++;
    }
    cout<<cnt<<endl;
    return 0;
}

C++ 解法, 执行用时: 4ms, 内存消耗: 1272KB, 提交时间: 2020-10-31

#include <iostream>
#include <cstring>
using namespace std;
#define N 1000001
bool table[N];
int main(){
    memset(table,true,sizeof(table));
    table[0]=table[1]=false;
    for(int i=4;i<=N;i+=2)
        table[i]=false;
    for(int i=3;i*i<=N;i+=2){
        if(table[i]){
            for(int j=i*i;j<=N;j+=2*i){
                table[j]=false;
            }
        }
    }
       
    int m,n;
    cin>>m>>n;
    int cnt=0;
    for(int i=m;i<=n;i++){
        if(table[i])
            cnt++;
    }
    cout<<cnt<<endl;
    return 0;
}

上一题