简单数学模板

来源:互联网 发布:美国国税局 知乎 编辑:程序博客网 时间:2024/04/29 16:13
void get_prime(int n){//造素数    check[1]=1;    for(int i=2;i<=n;i++){        if(!check[i])prime[tot++]=i;        for(int j=0;j<tot;j++){            if(i*prime[j]>n)break;            check[i*prime[j]]=1;            if(i%prime[j]==0)break;        }    }}void P_M(int n){//求1~n的逆元    a[1]=1;    for(int i=2;i<=n;i++)        a[i]=1ll*(M-M/i)*a[M%i]%M;}ll gcd(ll a,ll b){//最大公因数     while(b)b^=a^=b^=a%=b;    return a;}ll mul(ll a,ll b,ll p){//快速乘     ll res=0;    while(b){        if(b&1)res=(res+a)%p;        a=(a+a)%p;        b>>=1;    }    return res;}bool check_prime(ll x,ll p){    ll i=ceil(log(p-1.0)/log(2.0)),d=1;    for(;i>=0;i--){        ll tmp=d;d=mul(d,d,p);        if(d==1&&tmp!=1&&tmp!=p-1)return false;        if((p-1)&(1<<i))d=mul(d,x,p);    }    return d==1;}bool miller_rabin(ll n){//判素数    if(n==1)return false;    for(int i=0;i<9;i++){        if(n==prime[i])return true;        if(n%prime[i]==0)return false;    }    for(int i=0;i<9;i++)        if(prime[i]<n&&!check_prime(prime[i],n))return false;    return true;}ll Pollard_Rho(ll n,ll c){    ll x,y,d,i=1,k=2;    x=mul(rand(),rand(),n-1)+1;    y=x;    while(1){        i++;        x=(mul(x,x,n)+c)%n;        d=gcd(y-x,n);        if(d>1&&d<n)return d;        if(y==x)return n;        if(i==k){            y=x;            k<<=1;        }    }}ll pri_fac[M],now[M];int tp,top;void dec_prime(ll n){//分解质因数     //dfs,不想写了     //在此递归调用Pollard_Rho    //将n分解 }
3 0
原创粉丝点击