首页 > 其他分享 >线性筛不大全

线性筛不大全

时间:2023-08-26 20:55:21浏览次数:36  
标签:pr int void Croll ++ vis 线性 大全

众所周知,OI界有一股清流,它的名字叫做

筛法

这之中,有一线性筛十分出名,人称XXS.

今天稍微总结一下最近用过的,比较厉害的,线性筛.


目前用到的比较常用的线性筛,

大多是建立在质数的基础上的,

也就是以最普通的筛法求质数为基点,向外延伸.


筛法求质数

void Wonder_of_U()
{
    vis[1]=1;
    Croll(i,2,mmax)
    {
        if(!vis[i])
        {vis[i]=1;pr[++pr[0]]=i;}
        for(int j=1;j<=pr[0] && i*pr[j]<=mmax;++j)
        {
            vis[i*pr[j]]=1;
            if(i % pr[j]==0)
                break;
        }
    }
}


求一个数的最小只因数

void Wonder_of_U()
{
    vis[1]=1;
    Croll(i,2,mmax)
    {
        if(!vis[i])
        {vis[i]=i;pr[++pr[0]]=i;}
        for(int j=1;j<=pr[0] && i*pr[j]<=mmax;++j)
        {
            vis[i*pr[j]]=i;
            if(i % pr[j]==0)
                break;
        }
    }
}


筛莫比乌斯函数

void Wonder_of_U()
{
    mu[1]=1;
    Croll(i,2,mmax)
    {
        if(!vis[i])pr[++pr[0]]=i,mu[i]=-1;
        for(int j=1;j<=pr[0] && i*pr[j]<=mmax;++j)
        {
            vis[i*pr[j]]=1;
            mu[i*pr[j]]=-mu[i];
            if(i % pr[j]==0)
            {mu[i*pr[j]]=0;break;}
        }
    }
    return;
}


求一个数去掉所有平方因子后剩下的因数之积

void Wonder_of_U()
    {
        f[1]=1;
        Croll(i,2,n)
        {
            if(!vis[i])pr[++pr[0]]=i,f[i]=i;
            for(int j=1;j<=pr[0] && i*pr[j]<=n;++j)
            {
                vis[i*pr[j]]=1;
                f[i*pr[j]]=f[i]*pr[j];
                if(i%pr[j]==0)
                {
                    if(f[i]%pr[j])
                        f[i*pr[j]]=f[i]*pr[j];
                    else
                        f[i*pr[j]]=f[i]/pr[j];
                    break;
                }
            }
        }
    }
    

先这些,以后写(找)到了再补

标签:pr,int,void,Croll,++,vis,线性,大全
From: https://www.cnblogs.com/Cayde-6/p/17659434.html

相关文章

  • 《线性代数》2. 向量的高级话题
    规范化和单位向量在了解完向量的基础知识后,我们来探讨更多和向量有关的高级话题。首先向量是一个有向线段,由原点指向空间中的某一个点,所以向量除了具有方向之外,还应该具有大小。比如有两个向量\(\vec{u}\)、\(\vec{w}\),分别是\((3,4)^{T}\)、\((4,3)^{T}\),那么它们的长度是多......
  • 数据结构代码题-线性表
    王道数据结构大题代码线性表#include<stdio.h>#include<stdlib.h>voiddelMin(int*arr,intlen){ if(!len){ printf("数组为空"); return0; } intmin=*arr,minPos=0; for(inti=0;i<len;i++){ if(min>*(arr+i)){ min=*(arr+......
  • 《线性代数》1. 一切从向量开始
    什么是向量我们在初等数学的时候,研究的都是一个数,而到线性代数,我们将从研究一个数拓展到研究一组数,而一组数的基本表示方法就是向量(Vector)。向量是线性代数研究的基本元素,它就是一组数,比如\((1,2,3)\)就是一个向量。那么问题来了,向量究竟有什么作用呢?或者说我们研究一组数有......
  • 密码正则表达式大全
    1种只能由1种组成只能由字母组成,1-9位^[a-zA-Z]{1,9}$只能由数字组成,1-9位^\d{1,9}$只能由特殊字符组成,1-9位^[^\da-zA-Z\s]{1,9}$至少包含1种至少包含字母,1-9位^(?=.*[a-zA-Z]).{1,9}$至少包含数字,1-9位^(?=.*\d).{1,9}$至少包含特殊字符,1-9位^(?=.*[^\da-zA-Z\s])......
  • 【线性代数】第五章 特征值和特征向量
    1.特征值和特征向量特征值和特征向量的定义:对于n阶矩阵A,如果存在一个数λ以及非零n维列向量α,使得Aα=λα成立则称λ是矩阵A的一个特征值。非零向量α是矩阵A属于特征值的一个特征向量。这个式子可以写成(λE-A)α=0,α≠0,所以特征向量α可以说成这个齐次方程的非零......
  • 线性基学习笔记
    \(#definglllonglong\)线性基用处:快速查询一个数是否可以被一堆数异或出来快速查询一堆数可以异或出来的最大\(/\)最小值快速查询一堆数可以异或出来的第\(k\)大值线性基空间复杂度:设有一个序列,其值域为\([1,N]\),我们可以构造一个长度为\(⌈\log_2N⌉\)......
  • 线性代数为什么是计算机专业的基础课程
    线性代数在机器学习中比较低阶的应用是矩阵运算,比如softmax分类器y^=σ(WTx+b)\hat{\mathbf{y}}=\sigma(W^T\mathbf{x}+\mathbf{b}),在这里矩阵形式使得书写、计算更方便,也能帮助理解模型(将矩阵看作是一种变换);高阶一点的应用在无监督学习中,可以参考奇异值分解(SVD)等矩阵分解方......
  • Maven面试题大全及答案
    1.什么是Maven?Maven使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven除了以程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的......
  • Oracle脚本大全(Carlos-sierra)
    https://github.com/carlos-sierra/cscriptsCSScriptsInventorybyType(2023-07-29)LatencyLoadSQLPerformanceSPBL-SQLPlanBaselinesSPRF-SQLProfilesSPCH-SQLPatchesSessionsKillSessionsBlockedSessionsLocksSpaceReportingSpaceMaintena......
  • ArcMap栅格重采样:最邻近分配、众数算法、双线性插值、三次卷积插值
      本文介绍在ArcMap软件中,实现栅格图像重采样的具体操作,以及不同重采样方法的选择依据。  在文章ArcPy批量掩膜、重采样大量遥感影像中,我们介绍了基于Python中Arcpy模块对栅格图像加以批量重采样的方法;而在ArcMap软件中,我们可以实现不需要代码的栅格重采样操作;本文就对这一操......