• POJ 2992 Divisors


    每个数都可以分解成素数的乘积:

    写成指数形式:n=p1^e1*p2^e2*...*pn^en;(p都是素数)

    那么n的因数的数量m=(e1+1)*(e2+1)*...*(en+1);

    所以用筛选法筛出1-n的各个素因数的数量;

    然后容易得到n!的各个素因数的数量;

    因为C(n,k)=n!/k!/(n-k)!;

    所以接下来的事就容易办了.....

    我的代码:

     1 #include<cstdio>
     2 using namespace std;
     3 int e[432][432],sum[432][432],n,num,kk;
     4 bool prim[432];
     5 long long ans;
     6 int main()
     7 {
     8     for(int i=2; i<432; i++)
     9     {
    10         if(!prim[i])
    11         {
    12             num++;
    13             e[i][num]++;
    14             for(int j=i<<1; j<432; j+=i)
    15             {
    16                 prim[j]=1;
    17                 e[j][num]=e[j/i][num]+1;
    18             }
    19         }
    20     }
    21     for(int i=1; i<432; i++)
    22         for(int k=1; k<=num; k++)
    23             sum[i][k]=sum[i-1][k]+e[i][k];
    24     while(scanf("%d%d",&n,&kk)!=EOF)
    25     {
    26         ans=1;
    27         for(int i=1; i<=num; i++)
    28             ans=ans*(sum[n][i]-sum[kk][i]-sum[n-kk][i]+1);
    29 
    30         printf("%lld
    ",ans);
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    win10远程桌面连接提示身份验证错误,要求的函数不受支持的解决方案
    十六进制转八进制
    十六进制转十进制
    十进制转十六进制
    LEETCODE
    LINUX
    LINUX
    LEETCODE
    LEETCODE
    LEETCODE
  • 原文地址:https://www.cnblogs.com/yours1103/p/3281148.html
Copyright © 2020-2023  润新知