• bzoj 1485 [HNOI2009]有趣的数列 卡特兰数


    把排好序的序列看成一对对括号,要把他们往原数列里塞,所以就是括号序合法方案数
    即为卡特兰数

    f(n)=Cn2nn+1

    求的时候为避免除法,可以O(n)计算每个素数出现次数,最后乘起来,打完之后发现其实根本不用快速幂……

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #define N 2000005
    using namespace std;
    int prime[N],minp[N],num[N],tot,n,p;
    bool bo[N];
    long long ans=1;
    void getprime(){
        for(int i=2;i<=2*n;i++){
            if(!bo[i]){
                prime[++tot]=i;
                minp[i]=tot;
            }
            for(int j=1;j<=tot&&prime[j]*i<=2*n;j++){
                bo[i*prime[j]]=1;
                minp[i*prime[j]]=j;
                if(i%prime[j]==0) break;
            }
        }
    }
    void add(int x,int y){
        while(x!=1){
            num[minp[x]]+=y;
            x/=prime[minp[x]];
        }
    }
    int main()
    {
        scanf("%d%d",&n,&p);
        getprime();
        for(int i=n+1;i<=2*n;i++)add(i,1);
        for(int i=1;i<=n;i++)add(i,-1);
        add(n+1,-1);
        for(int i=1;i<=tot;i++)
            if(num[i]){
                while(num[i]){
                    if(num[i]&1)
                        ans=(ans*prime[i])%p;
                    prime[i]=(prime[i]*prime[i])%p;
                    num[i]>>=1;
                }
            }
        printf("%d
    ",ans);
    }
  • 相关阅读:
    C/S模式客户端连接服务器连接不上的问题
    C#获取网络状态
    SQL2008R转SQL2005
    Centos7 调整磁盘空间
    crontab 定时任务
    nginx 简单教程
    vagrant 使用
    加快 hive 查询的 5 种方法
    编译 ambari 2.7.3
    kylin 连接 hortonworks 中的 hive 遇到的问题
  • 原文地址:https://www.cnblogs.com/Ren-Ivan/p/7746694.html
Copyright © 2020-2023  润新知