数论模板合集(更新中)

注:均为开\(long\ long\)且未取模

#include<cstdio>
#include<algorithm>
#include<ctype.h>
#include<vector>
#include<queue>
#include<cstring>
#define lowbit(x) (x&-x)
#define ll long long
#define ld double
#include<map>
#include<stdlib.h>
#include<ctime>
#define mod 19260817
using namespace std;

int mg(int a,int b,int c)
{
    int ans=1;
    while(b)
    {
        if(b&1) ans=(ans*a)%c;
        b>>=1;
        a=a*a%c;
    }
    return ans;
} 

int exgcd(int a,int b,int &x1,int &y1)
{
    if(!b)
    {
        x1=1,y1=0;
        return a;
    }
    int x2,y2;
    int d=exgcd(b,a%b,x2,y2);
    x1=y2,y1=x2-(a/b)*y2;
    return d;
}

int crt(int a[],int m[],int n)
{
    int M=1,ans=0;
    for(int i=1;i<=n;i++) M*=m[i];
    for(int i=1;i<=n;i++)
    {
        int ni,tmp;int mi=M/m[i];
        exgcd(mi,m[i],ni,tmp);
        if(!ni) ni=M;
        ans=(ans+M*ni*a[i])%M;
    }
    return ans<0?ans+M:ans;
} 

int excrt(int a[],int m[],int n)
{
    int M=m[1],t,ni,tmp,d,ans=a[1];
    for(int i=2;i<=n;i++)
    {
        d=exgcd(M,m[i],ni,tmp);
        if((a[i]-ans)%d) return -1;
        t=m[i]/d,ni*=(a[i]-ans)/d,ni=(ni%t+t)%t;
        ans+=M*ni,M=M/d*m[i],ans%=M;
    }
    return ans<0?ans+M:ans;
}

int main(){}

原文地址:https://www.cnblogs.com/KatouKatou/p/9818355.html

时间: 2024-10-21 18:35:34

数论模板合集(更新中)的相关文章

学渣乱搞系列之Tarjan模板合集

学渣乱搞系列之Tarjan模板合集 by 狂徒归来 一.求强连通子图 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #incl

【模板】各类我会的傻逼算法模板合集(建设中

如果模板有误请杀了我 好了结束了可以关掉了 最大流dinic const int M=100005,N=2*1234; struct edge{ int to,next,cap; }e[M]; int cnt=1,last[N],h[N]; void insert(int a,int b,int c){ e[++cnt]=(edge){b,last[a],c};last[a]=cnt; e[++cnt]=(edge){a,last[b],c};last[b]=cnt; } bool bfs(in

最短路算法模板合集(Dijkstar,Dijkstar(优先队列优化), 多源最短路Floyd)

再开始前我们先普及一下简单的图论知识 图的保存: 1.邻接矩阵. G[maxn][maxn]; 2.邻接表 邻接表我们有两种方式 (1)vector< Node > G[maxn]; 这个是之前就定义了图的大小了,再下面使用的时候就不用对图的大小进行申请了, 但是因为是直接申请了大小 要对图进行初始化,因此可能在某些题目中这样使用的话会超时 (2)vector< vector<Node> > G; 这个是未定义大小,但是在使用之前要对其的大小内存进行申请. G.resi

模板集合——持续更新中

首先   sro_Cydiater_orz   sro_姬树流_orz 两位开搞模板集合已久的大神 1.对拍 1 @echo off 2 set path=C:\MinGWStudio\MinGW\bin 3 g++ -o makedata.exe makedata.cpp 4 g++ -o right.exe right.cpp 5 g++ -o test.exe test.cpp 6 set path=C:\Windows\system32 7 :loop 8 makedata.exe 9

字符串算法模板合集

1.KMP KMP模板 #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #define ll long long #define INF 2147483647 #define mem(i,j) memset(i,j,sizeof(i)) #define F(i,j,n) for(register int i=j;i&

《JavaScript权威指南》(第6版)翻译错误集 更新中。。。

§6.2.2  P126 原文:If o inherits x,and that property is an accessor property with a setter method. 原译:如果o继承自属性x,而这个属性是一个具有setter方法的accessor属性 正译:如果属性x是对象o继承来的,且x在o的原型对象中是一个具有setter方法的存取器属性 §§§§§ 原文地址:https://www.cnblogs.com/tsai-87/p/10729293.html

模板合集

[快速幂运算] long long quickpow(long long x,long long n,long long k) { long long ans=1; while(n>0) { if(n&1) ans=(ans*x)%k; n>>=1; x=(x*x)%k; } return ans; } [矩阵快速幂] [树状数组] #define lowbit(x) x&(-x) void give(int x,int k) { for(int i=x;i<=n;

线段树模板合集(CodeVS1080 1081 1082 4597)Pascal代码

var sum,flag,a,mn:array[0..800000] of int64; var n,m,x,y,z,c:int64; var i:longint; function max(a,b:int64):int64; begin if a>b then exit(a);exit(b); end; function min(a,b:int64):int64; begin if a<b then exit(a);exit(b); end; procedure change(h:int64

1951: [Sdoi2010]古代猪文|数论大合集

做这个题大概需要直到以下姿势:快速幂,费马小定理,卢卡斯定理,中国剩余定理.(大概也就这些 题目大概是让求 g∑d|nCdnmodp 然后根据费马小定理原式 =g∑d|nCdnmod(p?1)modp 然后也就是要求指数上的这个东西 ∑d|nCdnmod(p?1) 然后p?1还不是质数..需要分解成质因子然后用中国剩余定理合并,然后还要求组合数还要卢卡斯定理,最后特判一下g=p的情况 #include<algorithm> #include<iostream> #include&l