首页 > 其他分享 >acwing总结-线性质数筛

acwing总结-线性质数筛

时间:2024-04-10 21:01:00浏览次数:26  
标签:总结 cnt get int 数筛 质数 st primes acwing

质数筛

题目链接:质数筛线性筛法
ac代码:

#include<iostream>
#include<algorithm>
//https://www.bilibili.com/video/BV1LR4y1Z7pm/?spm_id_from=333.337.search-card.all.click&vd_source=436ccbb3a8f50110aa75654f38e35672
//链接到b站视频
using namespace std;
const int N=1000010;
int primes[N],cnt;
bool st[N];
void get_primes(int n){
    for(int i=2;i<=n;i++){
        if(!st[i])primes[cnt++]=i;
        for(int j=0;primes[j]<=n/i;j++){
            st[primes[j]*i]=true;//避免重复筛
            if(i%primes[j]==0)break;
        }
    }
}
int main(){
    int n;cin>>n;
    get_primes(n);
    cout<<cnt<<endl;
    return 0;
}

朴素筛法时间复杂度很大,我们加以优化,只筛掉质数的倍数,会将时间复杂度降到nloglogn,再次优化,引入欧拉筛,将时间复杂度降低到o(n)
在这里插入图片描述
那么欧拉筛为什么能将质数筛优化到线性呢?因为它每个数只筛一次,而无论是埃式筛还是朴素筛,它在筛去的过程中都有重复
下面我们看代码:

void get_primes(int n){
    for(int i=2;i<=n;i++){
        if(!st[i])primes[cnt++]=i;
        for(int j=0;primes[j]<=n/i;j++){
            st[primes[j]*i]=true;//避免重复筛
            if(i%primes[j]==0)break;
        }
    }
}

if(!st[i])primes[cnt++]=i; 每次把质数存在primes数组中,然后开始循环遍历数组,每一次把primes[j]*i筛掉,也就是被它的最小质因子筛掉,每次只筛一个,不重复,所以在o(n)的时间内得出结果。
那么这一句呢? ** if(i%primes[j]==0)break;**,这样做的目的是避免重复筛选,即在筛选过程中,只需要考虑能整除当前数 i 的最小质数。因为如果存在一个能整除 i 的质数,那么在之后的迭代中,i 会被标记为非质数,因此不需要再考虑更大的质数能否整除 i。

标签:总结,cnt,get,int,数筛,质数,st,primes,acwing
From: https://blog.csdn.net/2302_80729149/article/details/137610866

相关文章

  • python初学者笔记(7)——求和函数总结
    python经常要用到各种求和,例如列表求和,元素求和,利用函数求和,将这些方法总结发给大家!1.python两个数的求和函数defsum_2_num(num1,num2):result=num1+num2returnresult#必须在执行行输入,函数命名后必须调用,调用sum_2_num(),或者print()#sum_2_num(10,20......
  • TEE 开发中 遇到的环境问题 总结
    我们把CA和TA  编译的依赖环境统称为TDK (TrustDevelopKit)其中TDK目录结构如下:├──Android.mk├──ca_export_arm│  ├──bin│  ├──bin_android│  ├──bin_softfp│  ├──include│  ├──lib│  ├──lib_android│ ......
  • 测试总结
    在软件开发过程中,测试是确保代码质量和功能正确性的关键步骤。针对上述C++程序,我们采用了语句覆盖的测试方法,旨在验证程序中的每一条语句至少被执行一次。通过设计一系列精心挑选的测试用例,我们能够覆盖所有可能的输入情况,包括正数、负数、零、单个元素以及空数组等边界条件。......
  • keycloak~对框架中提供的Provider总结
    提供者目录ProviderAuthenticatorBaseDirectGrantAuthenticatorAbstractFormAuthenticatorAbstractUsernameFormAuthenticatorRequiredActionProviderFormActionProtocolMapperAbstractOIDCProtocolMapperRealmResourceProvider具体provider的作用Provid......
  • 【Vue I18n 国际化插件】vue3+vue-i18n 项目实战总结
    一、为什么要国际化?前端国际化:应用要服务于不同的地区的用户,所以应用不能单一语言;应用要能让不同地区的人无障碍使用就需要实现国际化。目前在各大商城项目中,对于国际化语言的需求越来越高了,其中最多的就是vue项目使用i18n插件实现多语言切换功能。前端国际化:应用要......
  • 4 10总结
    原来,使用axios发送请求的内容写在组件内,但重复形式很多,故把这些重复的形式封装到js中,封装为函数形式(参数),并暴露给外部,但由于请求服务器获取数据是比加载页面慢的,故需要同步等待,在axios前加上await,但使用await需要放在余部函数中,故在function前加上async,然后是把同步等待的结......
  • PROG2007编程总结
    评估简报PROG2007编程II职称评定2类型投资组合到期日4月8日星期一下午11:59AEST/AEDT(第6周开始)长度NA权重60%学术诚信(限值见下文在GenAI使用允许)GenAI可用于此评估。请参阅下面的学术诚信部分,了解可接受的使用GenAI在此评估中。提交请参阅下面的提交部分,了解如何提交您的看法单元......
  • NLP学习路线指南总结
    当然可以,以下是一份较为详细的NLP学习路线指南,帮助你逐步掌握自然语言处理的核心技术和应用。一、基础知识与技能语言学基础:语言学基本概念:语音、语法、语义等。语言的层次与分类:语音学、音系学、句法学、语义学等。编程基础:掌握Python编程语言基础,包括变量、数据类......
  • Ubuntu22.04安装vmtools失败总结
    Ubuntu22.04安装vmtools失败总结问题按照网上安装vmtools方法,点击VMwareWorkstation菜单栏虚拟机重新安装VMtools后再运行下列代码sudo./vmware-install.pl会失败。无法与Windows进行联动。解决方案sudoapt-getupdatesudoapt-getinstallopen-vm-tools-......
  • 23.Springboot常用的依赖总结_(没死之前)持续更新中~~~~~~
    2.2.5.RELEASE(注意maven对应版本)mybatis:<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version></......