首页 > 其他分享 >多项式全家桶(完善中)

多项式全家桶(完善中)

时间:2024-10-24 12:42:16浏览次数:1  
标签:完善 const int 多项式 全家 len cir

namespace Polynomial{
    const int N=2e6+5,G=3,iG=332748118;
    int cir[N],w[N],r[N],sav[N];
    void fft(int *f,int len,int t){
        for(int i=0;i<len;++i){
            cir[i]=(cir[i>>1]>>1)|((i&1)?len>>1:0);
            if(i>cir[i])swap(f[i],f[cir[i]]);
        }
        for(int l=2;l<=len;l<<=1){
            int w=qpow(t?G:iG,(mo-1)/l);
            for(int i=0;i<len;i+=l){
                int fw=1,u,v;
                for(int j=i;j<i+l/2;++j,fw=fw*w%mo){
                    u=f[j],v=f[j+l/2];
                    f[j]=(u+fw*v%mo)%mo;
                    f[j+l/2]=(u+mo-fw*v%mo)%mo;
                }
            }
        }
        int r=qpow(len,mo-2);
        for(int i=0;(!t)&&i<len;++i)f[i]=f[i]*r%mo;
    }
    void polymul(int *f,int *g,int len){
        for(int i=0;i<len;++i)f[i]=f[i]*g[i]%mo;
    }
    void polycpy(int *f,int *g,int len){//g -> f 
        for(int i=0;i<len;++i)f[i]=g[i];
    }
    void polyinv(int *f,int len){
        w[0]=qpow(f[0],mo-2);
        for(int l=2;l<=len;l<<=1){
            polycpy(r,w,l/2);
            polycpy(sav,f,l);
            fft(w,l*2,1),fft(sav,l*2,1);
            polymul(w,w,l*2);
            polymul(w,sav,l*2);
            fft(w,l*2,0);
            for(int i=0;i<l;++i){
                w[i]=(2*r[i]+mo-w[i])%mo;
                w[i+l]=0;
            }
        }
        polycpy(f,w,len);
        for(int i=0;i<len*2;++i){
            sav[i]=w[i]=r[i]=0;
        }
    }
}

标签:完善,const,int,多项式,全家,len,cir
From: https://www.cnblogs.com/chenhx-xcpc/p/18499372

相关文章

  • Stable Diffusion 3.5最强模型全家桶来了,三个型号
    就在刚刚,StabilityAI发布了自家最强的模型StableDiffusion3.5,而且是一个全家桶,包含三个版本。链接:https://huggingface.co/stabilityaiStableDiffusion3.5可以满足科研人员、业务爱好者、初创公司和企业的多样化需求,其中包括:StableDiffusion3.5Large:该基础模型......
  • 历年CSP-J初赛真题解析 | 2017年CSP-J初赛完善程序(27-36)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客(快速幂)请完善下面的程序,该程序使用分治法求x......
  • 10.19 窗口1.0(之后会完善代码,学到哪完善到哪)
    JFrame类的实例是一个底层容器(窗口)其他组件必须被添加到底层容器中,以便借助这个容器和操作系统进行信息交互。Jframe类是Container类的间接子类。当需要一个窗口时,可使用JFrame或其子类创建一个对象。窗口不能添加到另一个容器中JFrame()创建一个无标题窗口JFrame(Strings)创......
  • 基于拉格朗日插值多项式的Shamir's Secret Sharing 加密算法
    Shamir'sSecretSharing是一种加密算法,由AdiShamir于1979年提出,旨在将一个秘密(如密码、密钥等)分割成多个部分,并分发给不同的参与者。只有当足够数量的参与者(大于等于一个特定的阈值)将他们的份额组合在一起时,秘密才能恢复。少于阈值数量的参与者无法得到任何有用的信息。核心......
  • 多项式全家桶
    每次复习完下一次都会忘,这次下定决心一定要记下来!!!FFT和NTT板子,直接拿过来(包括了其他的定义):intn,m,rev[maxn];intqpow(intx,intk,intp){ intres=1; while(k){ if(k&1) res=res*x%p; k>>=1,x=x*x%p; } returnres;}voidprepare(......
  • 多项式
    多项式,OI的魅力,OIer的噩梦。多项式这个大家应该都会。对于式子\(\sum\limits_{i=0}^{k}a_{i}x^i\),且\(a_k\ne0\),那么我们称它是关于\(x\)的\(k\)次多项式。\(k\)为次数。就是这么简单生成函数定义:对于序列\(a_0,a_1,a_2,a_3,...\),其生成函数为\[f(x)=a_{0}+a_{......
  • IntelliJ IDEA 快捷键大全(也适用全家桶其他编辑器)
    以下是IntelliJIDEA的常用功能快捷键大全,适用于Windows/Linux系统(Mac用户可将Ctrl替换为Cmd,Alt替换为Option):功能分类功能描述快捷键(Windows/Linux)基本操作显示所有快捷键Ctrl+J显示主菜单Alt+Home全局搜索(任何内容)DoubleShift打开设置Ctrl+Alt+S保存所......
  • 密码学承诺之原理和应用 - Kate多项式承诺
    主页微信公众号:密码应用技术实战博客园首页:https://www.cnblogs.com/informatics/GIT地址:https://github.com/warm3snow简介多项式承诺是一种实用性比较强的密码学承诺方案,允许一个方(承诺者)向另一个方(验证者)承诺一个多项式的值,而不泄露多项式的具体形式。在零知识证明、可......
  • 基础多项式
    基础组合多项式多项式定义:普通多项式定义\(x^n\)为\(x\)的\(n\)次普通幂:\[x^n=\prod_{i=0}^{n-1}x\]则定义一个普通多项式\(F(x)\)为:\[F(x)=\sum_{i=0}A_ix^i\]变种:下降幂多项式定义\(x^{\underline{n}}\)为\(x\)的\(n\)次下降幂:\[......
  • Centos Linux下配置网络组Network Teaming(待完善)
    待完善[root@sre01~]#nmcliconnectionaddtypeteamcon-nameteam0ifnameteam0config'{"runner":{"name":"loadbalance"}}'ipv4.addresses15.15.15.15/24ipv4.methodmanualConnection'team0'(57b44a77-63ae-......