练习五1004判决数素的个数

素数计数算法
本文介绍了一种通过预处理方式快速计算两个整数之间素数数量的算法,并提供了完整的C++实现代码。该算法利用筛法高效找出指定范围内所有素数。

描述
输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。

输入
两个整数X和Y(1 <= X,Y <= 105)。

输出
输出一个整数,表示X,Y之间的素数个数(包括X和Y)。

样例输入
1 100

样例输出
25

代码:
#include<iostream>
using namespace std;
int main()
{
    int a,b,sum=0,i,j;
    cin>>a>>b;
    if(a>b)
    {
        int t=a;
        a=b;
        b=t;
    }
    bool f[100005];
    f[1]=false;
    for(i=2; i<=100000; i++)
    {
        f[i]=true;
    }
    for(i=2; i<=100000; i++)
    {
        if(f[i])
        {
            for(j=2*i; j<=100000; j+=i)
                f[j]=false;
        }
    }
    for(i=a; i<=b; i++)
    {
        if(f[i]) sum++;
    }
    cout<<sum;
    return 0;
}

解题思路:运用预处理的方法降低运行消耗,用筛法求素数的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。
细节方面:注意1不是数素,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值