首页 > 其他分享 >质数筛

质数筛

时间:2024-03-26 14:11:40浏览次数:8  
标签:约数 frac int 质数 调和级数 lnn

质数筛

若一次判断很多数时,用到素数筛,将 2~n 没个数进行枚举,看哪些数是它的约数,将它乘上某个数(枚举倍数):2i,3i···直到 > n,未被标记(除本身无其他约数)即质数

为什么是 nlogn 级别?

看每个数枚举的次数,2 大概\frac{n}{2},3\frac{n}{3}···统一提 n 即有:n(\frac{1}{2}+\frac{1}{3} +··· +\frac{1}{n}),其中(\frac{1}{2}+\frac{1}{3} +··· +\frac{1}{n})为调和级数,logn

 

#include <iostream>


using namespace std;


bool not_prime[200];


int main()
{
    int n = 100;
    for(int i = 2; i <= n; ++ i)
        for(int j = 2 ;i * j <= n ; ++ j)
        not_prime[i * j] = true;
    for(int i = 2; i <= n; ++ i) if(!not_prime[i]) cout << i << endl;
    return 0;
}

质数筛

朴素筛法:从前往后,依次将每个数倍数删掉,则最后剩余即质数

证明:若其中一个数为P,P此时留下,那么说明有2~P-1都没有把P删除,P不是2~P-1任何一个数的倍数,2~P-1不存在P的约数

时复分析:i = 2时,循环\frac{n}{2}次,3循环····n循环,得到公式后将n提出,则有n(\frac{1}{2}+ \frac{1}{3} + ··· + \frac{n}{n}),当n趋紧正无穷,后面调和级数 = lnn + c级别(c是欧拉函数0.577··),则\approxn *lnn

 

底数越大log数越小,则有

 

标签:约数,frac,int,质数,调和级数,lnn
From: https://www.cnblogs.com/OVSolitario-io/p/18096544

相关文章

  • 循环控制:(第9题)与质数相关的问题
    求某个范围内的质数#include<stdio.h>intmain(){ intc,d,i,j,f=0; intt,n=0; printf("pleaseinputc,d(c>2):\n"); scanf("%ld,%ld",&c,&d); if(c%2==0) { c++; } for(i=c;i<=d;i+=2) { for(t......
  • 数学算法(算法竞赛、蓝桥杯)--判定质数试除法
    1、B站视频链接:G06判定质数试除法_哔哩哔哩_bilibili题目链接:【深基7.例2】质数筛-洛谷#include<bits/stdc++.h>usingnamespacestd;boolis_prime(intx){ if(x==1)return0;//特判1不是质数 for(inti=2;i*i<=x;i++){//枚举小的那个到根号n即可 if(x%i==0......
  • 【深基4.例13】质数口袋
    【深基4.例13】质数口袋-洛谷https://www.luogu.com.cn/problem/P5723计算质数和的过程中,需要添加一些逻辑来确保求和不会超过给定的上限L,并且需要记录下所求得的质数个数。此外,需要实现一个函数来判断一个数是否为质数。importjava.util.Scanner;publicclassMain{......
  • B2134 质数的和与积
    B2134质数的和与积质数的和与积题目描述两个质数的和是\(S\),它们的积最大是多少?输入格式一个不大于\(10000\)的正整数\(S\),为两个质数的和。输出格式一个整数,为两个质数的最大乘积。数据保证有解。样例#1样例输入#150样例输出#1589参考程序#include<b......
  • c++算法学习笔记 (15) 质数
    1.试除法判断某个数是否为质数#include<iostream>usingnamespacestd;constintN=50005;boolis_prime1(intn){//暴力写法:O(n)if(n<2)returnfalse;for(inti=2;i<n;i++){if(n%i==0)returnfalse;......
  • 判断一个数是否为质数
    首先我们要知道质数的定义:一个数只有1和它本身的数称为质数。接下来利用这一性质来写判断质数的代码。packagecom.ty.java;importjava.util.Scanner;publicclassDay2{publicstaticvoidmain(String[]args){Scannery=newScanner(System.in)......
  • HJ6 质数因子
    https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607?tpId=37&tqId=21226&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&......
  • YBTOJ祭—质数与约数
    目录线性筛素数欧拉筛,老生常谈个人感觉放这道题的代码不如放板子//欧拉筛intprime[maxn];intfactor[maxn];intPrime(intn){intp=0;for(inti=2;i<=n;i++){if(!factor[i]){prime[p++]=i;factor[i]=i;......
  • 质数筛算法详解
    在信息竞赛中,我们总是会遇到很多判断质数的题目,那么在这里就由我来给大家讲解一下质数筛算法(这里所有讲的算法都是基于筛出从\(1\)到\(n\)之间的素数的算法)。1.普通筛法最普通的筛法,也就是将前\(n\)个正整数一个一个来判断是否为素数,并且在判断素数的时候要从\(2\)枚举......
  • 2/23质数
    质数:在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数小于等于N大概有lgN个质数质数的判定试除法 判断一个数N:O(√N)扫描2-√N之间所有整数,一次检查它们能否整除N质数筛:求出小于等于n的所有质数,特判v[1]=1i从小到大,如果i没有被前面的数(比它小的数)标记为合......