模板区域[未完待续](会定期的更新哦(有时间就更了))

    写这个博客目的就是为了记录下学过的模板方便我这焫鷄复习吧//dalao们绕道

    近期学的:

    (1)来自机房学长jjh大神教的求1~n的所有最小素因数和加上本焫鷄的批注

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>//求1~n的最小质因数
using namespace std;
const int MAXN=1e6+5;
const int LIM=1e6;
int prime[MAXN],mnp[MAXN],cnt=0;
bool vis[MAXN];
int main()
{
    for(int i=2;i<=LIM;i++)
    {
        if(!vis[i])
        {
            mnp[i]=i;//最小质因数
            prime[++cnt]=i;//质因数
        }
        for(int j=1;j<=cnt;j++)
        {
            if(1LL*i*prime[j]>LIM)
                break;
            vis[i*prime[j]]=1;//合数直接标记
            if(i%prime[j]==0)//如果i可以整除以prime[j]
            {
                mnp[i*prime[j]]=mnp[i];//那么这个数的最小质因数就为i的最小质因数
                break;
            }
            else //否则
                mnp[i*prime[j]]=prime[j];//他的最小质因数就为prime[j]
        }
    }
}

ヾ(?°?°?)??

     (2)比较简单的筛法求素数

void shai(int x)
{
    memset(f,1,sizeof(f));
    for(int i=2;i<=x;i++)
    {
        if(f[i])
        {
            for(int j=i+i;j<=x;j+=i)
            {
                f[j]=false;
            }
        }
    }
    for(int i=2;i<=x;i++)
        if(f[i])
            prime[++len]=i;
}

?(?>?<?)?

     (3)反素数

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
LL yi[15]={2,3,5,7,11,13,17,19,23,29};
LL n;
LL big,num;
void dfs(LL x,int y,int limit,int z)
{
    if(x>n)
        return;
    if(num<y)
    {
        big=x;
        num=y;
    }
    if(num==y&&big>x)
    {
        big=x;
    }
    LL temp=x;
    for(int i=1;i<=limit;i++)
    {
        temp=temp*yi[z];
        if(temp>n)
            return;
        dfs(temp,y*(i+1),i,z+1);
    }
}
int main()
{
    cin>>n;
    big=0;
    num=0;
    dfs(1,1,50,0);
    cout<<big<<endl;
    return 0;
}

( ̄▽ ̄)/

     (4)来个图论的基本算法Bellman-ford

bool Bellman-ford(int st)
{
    memset(dis,10,sizeof(dis));
    dis[st]=0;
    bool rel=0;
    for(int i=1;i<=n;i++)
    {
        rel=0;
        for(int j=1;j<=len;j++)
        {
            if(dis[a[j].x]+a[j].v<dis[a[j].y])
            {
                dis[a[j].y]=dis[a[j].x]+a[j].v;
                rel=1;
            }
        }
        if(!rel) return 0;
    }
    for(int i=1;i<=len;i++)
    {
        if(dis[a[i].x]+a[i].v<dis[a[i].y])
        {
            return 1;
        }
    }
    return 0;
}

 ̄へ ̄

     (5)SPFA

void SPFA(int s)
{
    memset(dis,10,sizeof(dis));
    memset(vis,0,sizeof(vis));
    dis[s]=0;vis[s]=1;q[s]=i;
    head=0;tail=1;
    while(head<tail)
    {
        int tn=q[++head];
        vis[tn]=0;
        int te=lin[tn];
        for(int j=te;j;j=a[j].next)
        {
            int tmp=a[j].y;
            if(dis[tn]+a[j].v<dis[tmp])
            {
                dis[tmp]=dis[tn]+a[j].v;
                if(!vis[tmp])
                {
                    q[++tail]=tmp;
                    vis[tmp]=1;
                }
            }
        }
    }
}

φ(>ω<*)

     (6)dijkstra算法

void dijkstra(int st)
{
    for(int i=1;i<=n;i++)
        dis[i]=a[st][i];
    memset(vis,0,sizeof(vis));
    vis[st]=1;dis[st]=0;
    for(int i=1;i<n;i++)
    {
        int minn=9999999;
        int k=0;
        for(int j=1;j<=n;j++)
        {
            if(!vis[j]&&dis[j]<minn)
            {
                minn=dis[j];
                k=j;
            }
        }
        if(k==0)
            return;
        vis[k]=1;
        for(int j=1;j<=n;j++)
        {
            if((!vis[j])&&(dis[k]+a[k][j]<dis[j]))
                dis[j]=dis[k]+a[k][j];
        }
    }
}

 ̄ω ̄=

     (7)最小生成树---Prim算法

void Prim(int s)
{
    memset(dis,10,sizeof(dis));
    for(int i=1;i<=n;i++)
        dis[i]=a[s][i];//所有点都不在队列里,除了s
    memset(vis,0,sizeof(vis));
    vis[s]=1; sumn=0;
    for(int i=2;i<=n;i++)
    {
        //寻找现在能到达的边中最短的那条
        int minn=a[0][0],c=0;
        for(int j=1;j<=n;j++)
        {
            if((!vis[j])&&(dis[j]<minn))
            {
                minn=dis[j];
                c=j;
            }
        }
        //c点到达了,最小生成树长度增加
        vis[c]=1;
        sumn+=minn;
        //基于这个点做松弛操作
        for(int j=1;j<=n;j++)
        {
            if((a[c][j]<dis[j])&&(!vis[j]))
                dis[j]=a[c][j];
        }
    }
}

(??ω??)

      //未完待续(欲知后事如何请听下回分解)

时间: 2024-08-03 19:27:25

模板区域[未完待续](会定期的更新哦(有时间就更了))的相关文章

计算几何模板(未完待续)

目前基本都是从蓝书上摘录的. 有一部分需要线性代数的知识,但是蓝书作者并没有解释,个人觉得用数学知识推出来更有助于记忆,死记硬背板子容易忘.以后有机会的话我在这里写点注解. 二维基础操作: 1 struct Point 2 { 3 double x, y; 4 Point(double x = 0, double y = 0):x(x), y(y){} 5 }; 6 7 typedef Point Vector; 8 9 int dcmp(double x)//比较 10 { 11 const

数论模板总结 -- 未完待续

// 代码待添加 GCD求最大公约数 扩展GCD求ax + by = c 的解以及判断是否有解 -- 当c为gcd(a,b)的倍数 Eratosthenes's sieve 埃氏筛选法求素数 筛选法求1~n欧拉函数值 -- 与埃氏筛选法一样,如果一个数j是i的倍数,那么其欧拉函数值就phi[j] = phi[j] / i * (i - 1) 并标记当前值,同时这也保证了i一定是素数 .当然初始值phi[i] = i

高精度模板(未完待续)

高精度题目(持续更新) 1.国王游戏 高精 \(\times\) 低精 高精 \(\div\) 低精 高精两数大小比较 高精数输出 原文地址:https://www.cnblogs.com/Peter0701/p/11237076.html

归并排序求逆序对模板(未完待续)

归并排序求逆序对题目(持续更新) \(1.\) \(Ultra\) \(Quicksort\) (需要该篇博文的阅读密码) 归并排序求逆序对 细节:传参三个,左.中.右三端点,每次运算注意中端点总取左右端点和的一半:返回条件为左右端点相等,此时无需排序. \(View\) \(Code\) void msort(int l,int mid,int r) { if(l==r) return; msort(l,(l+mid)>>1,mid); msort(mid+1,(r+mid+1)>&g

快速运算模板(未完待续)

快速运算题目(持续更新) \(1.\) \(Raising\) \(Modulo\) \(Numbers\) 快速幂 细节:注意返回答案前取模. $View$ $Code$ inline long long readl() { long long ret=0,f=1; char ch=getchar(); while(ch>'9'||ch='0'&&ch>=1; } return ans%mod; } long long a,b,p; int main() { a=readl(

网络架构与七层参考模式简介(未完待续,本周会更新完)

Network Connectivity 1. Important terminologies 1) Link 设备连接的连线.Link本身既可以是有线的,也可以是无线的. 2) Node 设备.电脑,笔记本电脑,手机都可以是Node. 3) Point-to-point 连接的设备只有两个. 4) Multiple access 连接的设备两个以上.多个设备同时去存取的这样一个Link. 5) Switched Network -> Circuit Switched 通讯之前线路必须建立起来.

Linux 命令个人总结====== 未完待续 个人认为比较重要

Linux 命令个人总结====== 未完待续 man [功能说明]: 查看帮助 [语法格式]: man [123456789] 命令.文件. [选项参数]: 数字"1"表示用户命令,比如"ls" 数字"2"表示系统调用 数字"3"表示C语言库函数 数字"4"表示设备或特殊文件 数字"5"表示文件格式和规则 数字"6"表示游戏及其他 数字"7"表示

Dancing Links 小结 (因为之前丢了一次稿,未完待续)

Dancing Links (DLX)是Knuth为了解决精确覆盖问题而提出的算法,很多搜索问题可以转化位精确覆盖问题从而使用Dancing Links解决(效率会比DFS高很多,因为里面常常蕴涵着意想不到的剪枝) 信息学竞赛中的DLX的问题类似网络流,只需建图+贴版即可 参考文献: 1.DLX的原理:Knuth的论文: 原版:http://arxiv.org/abs/cs/0011047 翻译版:http://wenku.baidu.com/view/d8f13dc45fbfc77da269b

whatweb.rb 未完待续

#!/usr/bin/env ruby #表示ruby的执行环境 =begin # ruby中用=begin来表示注释的开始 .$$$ $. .$$$ $. $$$$ $$. .$$$ $$$ .$$$$$$. .$$$$$$$$$$. $$$$ $$. .$$$$$$$. .$$$$$$. $ $$ $$$ $ $$ $$$ $ $$$$$$. $$$$$ $$$$$$ $ $$ $$$ $ $$ $$ $ $$$$$$. $ `$ $$$ $ `$ $$$ $ `$ $$$ $$' $ `$