当前位置:网站首页>868. 筛质数
868. 筛质数
2022-07-21 04:42:00 【Hunter_Kevin】
题目:
给定一个正整数 n,请你求出 1∼n 中质数的个数。
输入格式
共一行,包含整数 n。
输出格式
共一行,包含一个整数,表示 1∼n 中质数的个数。
数据范围
1≤n≤106
输入样例:
8
输出样例:
4
1、朴素筛法O(nlogn):
/** 朴素筛法:从2开始,到N。如果当前元素为p,则把2~p-1中每个元素的倍数删除,留下的一定是质数,因为2~p-1中不存在p的因子 **/
#include <iostream>
using namespace std;
const int N = 1000010;
int primes[N];//保存质数
bool s[N];//标记对应下标的数字是是否已经被删除
int cnt = 0;//标记质数的个数
void getPrime(int n)
{
for(int i = 2; i <= n; i++)
{
if(!s[i])//从2开始,如果数字i没有被删除,则记录到质数数组中
primes[cnt++] = i;
for(int j = i+i; j <= n; j+=i)//遍历n前的数字,删除i的倍数
s[j] = true;
}
}
int main()
{
int n;
cin>>n;
getPrime(n);
cout<<cnt<<endl;
return 0;
}
2、埃氏筛法(nloglogn):
/** 埃氏筛法:从2开始,到N。如果当前元素为p,则把2~p-1中每个元素的倍数删除,留下的一定是质数,因为2~p-1中不存在p的因子 **/
#include <iostream>
using namespace std;
const int N = 1000010;
int primes[N];
int cnt;
bool s[N];
void getPrimes(int n)
{
for(int i = 2; i <= n; i++)//从2开始遍历,筛选2~n直接的质数
{
if(!s[i])//如果数字i没有被删除,则说明i是质数
{
primes[cnt++] = i;//将质数保存到质数数组中
for(int j = i+i; j <=n; j+=i)//删除质数i的倍数,合数一定可以被分解成质数
s[j] = true;//标记合数j被删除
}
}
}
int main()
{
int n;
cin>>n;
getPrimes(n);
cout<<cnt<<endl;
return 0;
}
3、线性筛法O(n):
/** 线性筛法,原理是1~n中的数,在筛选过程中,一个数一定是被其最小质因子筛掉的 1、i从2枚举到指定的数n 2、如果数字i在此之前没有被筛掉,那么i一定是质数 3、j从0开始枚举已经存在的质数,把合数primes[j]*i筛掉,直到枚举到的primes[j]是i的最小质因子,就退出循环 4、循环的时候,s[ primes[j]*i ]中的primes[j]*i的最小质因子一定是primes[j] 1.i% pj == 0, pj定为i最小质因子,pj也一定为pj*i最小质因子 2.i% pj != 0, pj定小于i的所有质因子,所以pj也一定为pj*i最小质因子 5、一个合数一定会被筛掉 对于一个合数x,假设x的最小质因子是pj,那么当i枚举到x之前,一定会枚举到x/pj时,此时s[ primes[j]* i ]==s[ primes[j]* (x/pj) ]==s[ x ] = true就会筛掉x **/
#include <iostream>
using namespace std;
const int N = 1000010;
int primes[N];
bool s[N];
int cnt;
void getPrimes(int n)
{
for(int i = 2; i <= n; i++)//从2开始遍历到指定的n,筛选出2~n的质数
{
if(!s[i])primes[cnt++] = i;//如果i没有被筛掉,则为质数
for(int j = 0; primes[j] <= n / i; j++)//j从0开始,遍历已经有的质数 primes[j] <= n/i是控制筛选小于n的合数primes[j]*i即可
{
s[ primes[j]*i ] = true;//用最小质因子primes[j]去筛掉合数primes[j]*i
if(i % primes[j] == 0)break;//如果j枚举到了i的最小质因子primes[j],就退出循环,防止重复筛选
//因为j是从0开始枚举的,所以当i % primes[j] == 0时,primes[j]一定是i的最小质因子,并且s[ primes[j]*i ]中的primes[j]*i的最小质因子也是primes[j]
//当i % primes[j] != 0时,原因一定是还没有枚举到i的最小质因子,此时的primes[j]一定小于i的最小质因子,但此时s[ primes[j]*i ]中的primes[j]*i的最小质因子也一定是primes[j]
}
}
}
int main()
{
int n;
cin>>n;
getPrimes(n);
cout<<cnt<<endl;
return 0;
}
边栏推荐
- CV (4)- Backpropagation and Neural Networks
- 【To .NET】.NET Core Web API开发流程知识点整理[入门]
- Wireless location technology experiment II TDOA least square location method
- 信号处理系统综合设计-最小阶数的IIR数字高通滤波器
- (三)JDBCTemplate
- 基于hydra库实现yaml配置文件的读取(支持命令行参数)
- Get IP address
- How to remove Baidu advertisements
- [C language] detailed explanation of file related functions
- 从平面设计转行软件测试,喜提11K+13薪,回头看看我很幸运
猜你喜欢
全志A40i开发板硬件说明书——100%国产+工业级方案(上)
Interview with data center and Bi business (II): pit of organizational structure Sorting
Quanzhi a40i development board hardware specification - 100% domestic + industrial level scheme (Part 1)
Experiment 3 of wireless location technology simulation of location fingerprint location based on signal strength
Project Management Maturity Model and project quantitative management
测试入门——使用场景法设计ATM的测试用例
STM32——通用定时器控制超声波传感器HCSR04
NXP i.MX 8m mini core board specifications, quad core arm cortex-a53 + arm cortex-m4
"New product release" B2B connector version NXP i.MX 8m Mini industrial core board
【C 练习】宏实现交换数字二进制奇偶位
随机推荐
维密萎靡,曾经“性感”现在真的“凉了”!
笔试强训第20天
The command of gun compiler is g++:$g++ -o prog1 prog1 cc
【C 练习】找出单身狗
笔试强训第19天
全志A40i开发板硬件说明书——100%国产+工业级方案(中)
STM32——ADC读取光敏传感器控制LED灯,看门狗中断
让你告别996的项目维护方式
STL list输出和增加
The ability to detect movement in vivo and build a safe and reliable payment level "face brushing" experience
Deep learning - (5) class of data imbalance_ weight
TikTok卖家该怎么更好的引流?
电磁场与电磁波实验二 熟悉Matlab PDEtool在二维电磁问题的应用
input: kMAX dimensions in profile 0 are [2,3,128,128] but input has static dimensions [1,3,128,128]
Experiment 3 of wireless location technology simulation of location fingerprint location based on signal strength
TikTok怎么开启社交电商?
ECCV 2022 开源 | 给1万帧视频做目标分割
jimu积木报表打印时多一页空白页-问题解决
CV (4)- Backpropagation and Neural Networks
Interview with data center and Bi business (II): pit of organizational structure Sorting