首页 > 其他分享 >质数筛

质数筛

时间:2024-08-17 17:50:07浏览次数:13  
标签:质数 vis bool maxn isprime ll

  • 判断一个数是不是质数,最基础的方法:
bool isprime(int n) {
    if(n <= 1) return 0;
    for(int i = 2; i <= sqrt(n); i ++) {
        if(n % i == 0) return 0;
    }
    return 1;
}

这个方法虽然能判断是不是质数,但效率很低,如果要判断的这个数很大,那么多半是会TLE,所以我们需要更高效的算法;

  • 埃式筛:
ll is_prime[maxn];  //记录质数 
bool vis[maxn];  //判断是不是质数

void isprime(ll n)
{
	vis[0] = 1;
	ll cnt = 0;  //记录质数个数 
	for(ll i = 2; i <= n; i ++){
		if(!vis[i]){
			is_prime[++cnt] = i;
			for(ll j = 2 * i; j <= n; j += i){
				vis[j] = 1;  //记录质数的倍数是不是质数 
			}
		}
	}
} 

埃式筛就会比普通方法要快得多,但它也有个缺点,就是同一个数会被筛很多次,这导致时间上有所损失,所以有什么办法可以只筛一次呢?当然有:

  • 欧拉筛(也称线性筛)
ll is_prime[maxn];  //记录质数 
bool vis[maxn];  //判断是不是质数

void isprime(ll n)
{
	vis[0] = 1;
	ll cnt = 0;  //记录质数个数 
	for(ll i = 2; i <= n; i ++){
		if(!vis[i]){
			is_prime[++cnt] = i;
			if(i <= sqrt(n)){
				for(ll j = i * i; j <= n; j += i){
					vis[j] = 1;  //记录质数的倍数是不是质数 
				}
			}
		}
	}
}

标签:质数,vis,bool,maxn,isprime,ll
From: https://www.cnblogs.com/yishujia/p/18364711

相关文章

  • [开题报告]FLASK框架水质数据呈现小程序6072x(源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着工业化、城市化的快速发展,水体污染问题日益严峻,对居民生活质量和生态环境造成了严重影响。水质安全直接关系到人类健康与生存环境的可......
  • P5723 【深基4.例13】质数口袋
    题目描述小A有一个质数口袋,里面可以装各个质数。他从 22 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,装的质数的和不能超过 �L。给出 �L,请问口袋里能装下几个质数?将这些质数从小往......
  • 算法板子:质数——判定质数、分解质因数、筛质数
    目录一、判定质数1.代码二、分解质因数1.质因数的概念2.代码三、筛质数——获取1~n中所有质数的个数1.合数的概念2.代码一、判定质数1.代码#include<iostream>usingnamespacestd;boolis_prime(intx){//1不是质数,需要特判if(x==1)r......
  • 欧拉筛线性筛质数
    欧拉筛线性筛质数经典题解我的乱搞筛法和欧拉线性筛法的速度对比:模版code#include<bits/stdc++.h>usingnamespacestd;constintmaxn=100000009;boola[100000009];intread(){intx=0,f=1;charch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=ge......
  • 大质数分解模板
    jiangly的(偷一下i64mul(i64a,i64b,i64m){returnstatic_cast<__int128>(a)*b%m;}i64power(i64a,i64b,i64m){i64res=1%m;for(;b;b>>=1,a=mul(a,a,m))if(b&1)res=mul(res,a,m);......
  • 筛选质数的三个方法:1.素数判断,2埃氏法,3欧拉法。
    文章目录前言一、素数是什么?二、算法使用原理1.合数:合数除了1和它本身以外,还有其他因数。与素数相对,素数只有1和它本身两个因数,而合数则至少有三个因数。2.我们理解了合数的概念后,可以知道一个合数可以由至少三个因数构成如,6=1*2*3,说明所有素数的倍数都可以是合数,那么我......
  • 镜面质数 题解
    题目id:20313题目描述如果一个质数镜像反转(即将该数各个位上数字反转)后仍然是质数,那么就称这个质数为镜像质数。例如质数\(13\)反转后为\(31\),则\(13\)为一个镜像质数。现在给定一个整数\(N\),请求出整数\(1\simN\)范围内有几个镜像质数。注意:求范围内的镜像质数时,质数和镜像反......
  • leetcode数论(2523. 范围内最接近的两个质数)
     前言经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。描述给你两个正整数 left 和 right ,请你找到两个整数 num1 和 num2 ,它们满足:left<=nums1<nums2<=right  。nums1 和 nums2 都是 质数 。nums2-nums1......
  • 质数差列 题解
    题目id:20315题目描述驰骋宇宙的鱼大大找到了一个古遗迹,稍作研究后发现这是一个来着远古的质数星球文明遗迹,这个文明的特点是所有事物都和质数息息相关。于是,鱼大大赶紧列出了一堆的质数,以方便自己的研究。这天鱼大大找到了质数星球文明的一个遗迹仓库大门,正准备破解密码的同时......
  • 基础数论 质数与约数
    基础数论前置芝士:等比数列求和:\(S_n=a_0\frac{1-q^n}{1-q}\)质数与约数:整除与约数设\(n\)为非负整数,\(d\)为正整数,若\(\frac{n}{d}\)为整数,则称\(d\)整除\(n\),记为\(d\midn\)。此时,则称\(d\)是\(n\)的约数,或因数、因子;称\(n\)为\(d\)的倍数。质数......