数论代码整理

数论模板

此处均为代码,学习出门右转

一、公约数、公倍数

GCD
int gcd(int x,int y){
    return !y?x:gcd(y,x%y);
}
LCM
int lcm(int x,int y){
    return x/gcd(x,y)*y;
}
拓展欧几里得
int x,y;
int ex_gcd(int a,int b){
    if(!b){
        x=1,y=0;return a;
    }
    int temp=ex_gcd(b,a%b);
    x=y,y=temp-a/b*y;
    return temp;
}

二、筛素数

埃拉托色尼筛法
int cnt,prime[maxn];
bool not_pr[maxn];
void Get_Prime(int x){
    not_pr[1]=1;
    for(int i=2;i<=x;++i)
        if(!not_pr[i]){
            prime[++cnt]=i;
            for(int j=i*i;j<=x;j+=i) not_pr[j]=1;
        }
}
线性筛
int cnt,prime[maxn];
bool not_pr[maxn];
void Get_Prime(int x){
    not_pr[1]=1;
    for(int i=2;i<=x;++i){
        if(!not_pr[i]) prime[++cnt]=1;
        for(int j=1;j<=cnt&&i*prime[j]<=n;++j){
            not_pr[i*prime[j]]=1;
            if(i%prime[j]==0) break;
        }
    }
}
在\(O(nlogn)\)时间内筛除n以内所有数的素因子
int cnt,prime[maxn],pre[maxn];
bool not_pr[maxn];
void Get_Prime(int x){
    not_pr[1]=1;
    for(int i=2;i<=x;++i){
        if(!not_pr[i]) prime[++cnt]=i;
        for(int j=1;j<=cnt;++j){
            if(i*prime[j]>x) break;
            not_pr[i*prime[j]]=1,pre[i*prime[j]]=j;
            if(i%prime[j]==0) break;
        }
    }
}
void Get_Ans(int x){
    for(int i=1;i<=x;++i){
        printf("%d:",i);
        int di=i;
        while(di!=1) printf("%d",prime[pre[di]]),di/=prime[pre[di]];
    }
}

三、求欧拉\(φ\)函数

埃拉托色尼筛法
int cnt,prime[maxn],phi[maxn];
bool not_pr[maxn];
void euler(int x){
    for(int i=1;i<=x;++i) phi[i]=i;
    for(int i=2;i<=x;++i)
        if(!not_pr[i]){
            prime[++cnt]=i,phi[i]=i-1;
            for(int j=i*i;j<=x;++j){
                not_pr[j]=1,phi[j]=phi[j]/i*(i-1);
         }
     }
}
欧拉筛
int cnt,prime[maxn],phi[maxn];
bool not_pr[maxn];
void euler(int x){
    phi[1]=1,not_pr[1]=1;
    for(int i=2;i<=x;++i){
        if(!not_pr[i]) prime[++cnt]=i,phi[i]=i-1;
        for(int j=1;j<=cnt;++j){
            if(i*prime[j]>x) break;
            not_pr[i*prime[j]]=1;
            if(!(i/prime[j])) phi[i*prime[j]]=phi[i]*prime[j];
            else phi[i*prime[j]]=phi[i]*(prime[j]-1);
        }
    }
}

四、求逆元

单个数求逆元
int x,y;
int ex_gcd(int a,int b){
    if(!b){
        x=1,y=0;return a;
    }
    int temp=gcd(b,a%b);
    x=y,y=temp-a/b*y;
    return temp;
}
int cal(int a,int m){//ax%m==1,求最小的x
    int Gcd=gcd(a,m);
    if(1%Gcd!=0) return -1;
    x*=1/Gcd,m=abs(m);
    int ans=x%m;
    if(ans<=0) ans+=m;
    return ans;
}
快速幂求逆元

若\(p\)为质数,\(a^{(p-1)}~ mod ~p=1,a\)的逆元为\(a^{(p-2)}\);若\(p\)不是质数,\(a^{phi[p]} ~mod ~p=1\),\(a\)的逆元为\(a^{phi[p]-1}\)。

线性筛逆元
int inv[maxn];
void Get_inv(int x){
    inv[1]=1;
    for(int i=2;i<=x;++i) inv[i]=(p-p/i)*inv[p%i]%p;
}

快速幂

快速幂
int qpow(int x,int k){
    int a=1;
    while(k){
        if(k&1) a*=x;
        x*=x;
        k>>=1;
    }
    return a;
}
取膜快速幂
int powmod(int a,int k,int p){
    long long a=1;
    while(k){
        if(b&1) a=1ll*a*x%p;
        x=1ll*x*x%p;
        k>>=1;
    }
    return a;
}

组合数

void init_C(){
    for(int i=0;i<=n;++i) c[i][0]=1;
    for(int i=1;i<=n;++i)
            for(int j=1;j<=i;++j)
                    c[i][j]+=c[i-1][j-1]+c[i-1][j];
}

原文地址:https://www.cnblogs.com/kylinbalck/p/9799885.html

时间: 2024-10-19 15:41:58

数论代码整理的相关文章

数论知识整理

代码均未经过编译!!!(不用编译啦) 默认: #define ll long long 快速幂 正整数a,b,p,求a^b(mod p)的值,时间复杂度O(logb) ll ksm(ll a, ll b, ll p) { ll c = 1 % p; a %= p; while (b) { if (b & 1) c = c * a % p; a = a * a % p; b >>= 1; } return c; } 最大公约数 正整数a,b,求a,b的最大公约数,时间复杂度在log级别

常用代码整理(重要)

常用代码整理: 1.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATC

css代码整理、收集

整理了一下之前用到过的css代码,实现一种效果或许有许多种写法,我这里整理了一下我个人认为兼容性比较好,结构比较简洁的代码……如有写得不对的地方敬请前辈们指点赐教一下,小弟不胜感激!此学习笔记是动态的——我日后发现有好的代码段会陆陆续续整理添加上去. css:ellipsis省略号 <style> .news{width:320px; text-overflow:ellipsis; -o-text-overflow:ellipsis; -moz-binding:url('ellipsis.xm

Chrome应用技巧之代码整理。

我们有时候在看别人网站代码时往往是经过压缩的,代码都在一行上了,调试很是困难,今天给大家介绍一种基本Chrome浏览器的代码整理方法.请看图:

bootstrap 新手学习笔记 代码整理

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Bootstrap 实例 - 滚动监听(Scrollspy)插件方法</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <script src="js/jqu

关于UIImagePickerViewController拍摄video的分辨率和方向的一些代码整理

近期项目由于要使用拍摄视频,用的是UIImagePickerViewController,要求是分辨率640x480,但是试了各种 imagePickerController.videoQuality 拍出来的视频导出来依然达不到640x480. 并且旋转设备拍摄后拍摄出来的视频导出来也是反的. 最后查阅了各种网站找了各种资料之后,看到国外大牛在视频拍摄完成之后使用AVFoundation做的压缩和视频调整.整理了一下代码做了部分调整,感觉到AVfoundation的强大之处,哈哈 这些代码用在

常用js代码整理、收集

个人整理了一下个人常用到的一些js代码,以方便学习以及日后使用,或许有一些是个人之前从网上摘下来的,但是不记得是具体从哪里来的了,如果你看到有一段代码跟你的文章很相似甚至一样,请不要气愤,请告诉我,我必定加上版权链接. 清除输入框默然提示文字 1 <input type="text" name="word" value='请输入关键字' style="color:#ccc;" /> 2 <script> 3 /* 4 *清

Smtp邮件发送系统公用代码整理—总结

1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一下:总结不全,纯属于整理封装的类. (1):用户注册(推送邮件,提示用户注册成功,牢记用户名密码) (2):修改密码(推送邮件,提示用户密码修改成功) (3):下订单(推送邮件,提示用户订单已下) (4):物流跟踪(推送邮件,跟踪物流信息) (5):广告推送(推送广告,提示用户近来公司近况或者新的商

sui picker,datetimepicker,citypicker代码整理

将sui中的sm.js sm.css 整理拆分删除了大量代码整理出来. picker.css picker.js datetimepicker.js city-picker.js 附件:http://down.51cto.com/data/2437983 具体使用方式如下: <html>    <head>       <meta charset="utf-8">       <meta http-equiv="X-UA-Compat