文章

9

粉丝

37

获赞

91

访问

2.3k

头像
非素数个数 题解:
P1701 厦门大学机试题
发布于2025年2月26日 23:26
阅读数 377

如果说2是素数,则2的倍数绝对不是素数,同理3也一样。

那么筛选素数,就是从2开始,假定一开始都是素数,第一次循环会将2的倍数的数全部置1(表示不为素数),之后从3开始。

可以发现6即是2的倍数又是3的倍数,所以可以进一步的从i的平方开始,优化,当然不优化从i+i开始也行。

#include<bits/stdc++.h>
using namespace std;
//bool sushu(int n){
//    for(int i=2;i<=sqrt(n);i++){
//        if(n%i==0){
//            return false;
//        }
//    }
//    return true;
//}
int f[10000000+5]={0};
void func(int b){
    for(int i=2;i<=sqrt(b);i++){
        if(f[i]==0){
            for(int j=i*i;j<=b;j+=i){
                f[j]=1;
            }
        }
    }
}
int main(){
    int a,b;
    int cnt;
    while(cin>>a>>b){
        cnt=0;
        func(b);
        for(int i=a;i<=b;i++){
            if(f[i]==1) cnt++;
        }
        cout<<cnt<<endl;
    }
    return 0;
}

 

登录查看完整内容


登录后发布评论

1 条评论
dzj
2025年3月19日 14:19

好理解

赞(1)