zoukankan      html  css  js  c++  java
  • 【CSP模拟赛】方程(数学)

    题目描述

      求关于x的方程:x1+x2+……xk=n的非负整数解的个数。

    输入格式

      仅一行,包含两个正整数n,k。

    输出格式

      一个整数,表示方程不同解的个数,这个数可能很大,你只需输出mod 20080814 的结果。

    输入样例

      1 1

    输出样例

      1
      提示
      数据范围
      对于50%的数据,n,k<=300
      对于80%的数据,n,k<=1000
      对于100%的数据,n,k<=100000

    分析

      第一眼看这不是结论题吗?直接就是C(n+k-1,n-1)。

      然后一看模数是个偶数,瞬间懵逼

      最后直接赌命暴力分解质因数,居然过了。。。。。。

      仔细算复杂度应该是n根号n的

      代码

    #include<cstdio>
    const int mod=20080814;
    int n,k,mp[200005];
    int qp(int a,int k)
    {
        int res=1;
        while(k)
        {
            if(k&1)res=1ll*res*a%mod;
            a=1ll*a*a%mod;k/=2;
        }
        return res;
    }
    int C(int a,int b)
    {
        int ans=1;
        for(int i=a,x;i>=a-b+1;i--)
        {
            x=i;
            for(int j=2;j*j<=x;j++)
            while(x%j==0)x/=j,mp[j]++;
            mp[x]++;
        }
        for(int i=2,x;i<=b;i++)
        {
            x=i;
            for(int j=2;j*j<=x;j++)
            while(x%j==0)x/=j,mp[j]--;
            mp[x]--;
        }
        for(int i=2;i<=200000;i++)ans=1ll*ans*qp(i,mp[i])%mod;
        return ans;
    }
    int main()
    {
        scanf("%d%d",&n,&k);
        printf("%d
    ",C(n+k-1,n-1));
    }
  • 相关阅读:
    MVC @Url.Action 小示例
    Eclipse快捷键
    MVC视频下载/文件上传
    MySQL数据库备份/导出
    C#文件下载
    C#正则表达式匹配字符串中的数字
    常用的LINQ to SQL 用法
    C# 实现抓取网页内容(一)
    C# 繁体字和简体字之间的相互转换
    我到底会什么??
  • 原文地址:https://www.cnblogs.com/firecrazy/p/11654292.html
Copyright © 2011-2022 走看看