zoukankan      html  css  js  c++  java
  • poj:2992 因子数量

    题意:

    求 组合数c(n,k)的因子数量

    由算术基本定理很容易求得,不过第一次却T了,加了好多预处理,o1查询,才过

    #include <iostream>
    #include <stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<string>
    #include<ctype.h>
    using namespace std;
    #define I64d lld
    int prime[100];
    int isnotprime[500];
    int fac[500][100];
    int nfac[500][100];
    long long ans[500][500];
    int np;
    void setprime()
    {
        np=0;
        for(int i=2;i<=431;i++)
        {
            if(!isnotprime[i])
            {
                prime[np++]=i;
            }
            for(int j=0;j<np&&i*prime[j]<=431;j++)
            {
                isnotprime[i*prime[j]]=1;
                if(i%prime[j]==0)
                    break;
            }
        }
        return;
    }
    void setfac()
    {
        memset(fac,0,sizeof(fac));
        for(int i=2;i<=431;i++)
        {
            int p=i;
            for(int j=0;j<np;j++)
            {
                while(p%prime[j]==0)
                {
                    fac[i][j]++;
                    p/=prime[j];
                }
            }
        }
        return;
    }
    void setans()
    {
        memset(nfac,0,sizeof(nfac));
        for(int i=2;i<=431;i++)
        {
            for(int j=0;j<np;j++)
                nfac[i][j]=nfac[i-1][j]+fac[i][j];
        }
        for(int n=0;n<=431;n++)
        {
            for(int k=0;2*k<=n;k++)
            {
                long long res=1;
                for(int i=0;i<np;i++)
                {
                    res*=nfac[n][i]-nfac[k][i]-nfac[n-k][i]+1;
                }
                ans[n][k]=ans[n][n-k]=res;
            }
        }
        return;
    }
    int main()
    {
        setprime();
        setfac();
        setans();
        int n,k;
        while(scanf("%d%d",&n,&k)!=EOF)
        {
            printf("%I64d
    ",ans[n][k]);
        }
        return 0;
    }
  • 相关阅读:
    HDOJ 2076 夹角有多大(题目已修改,注意读题)
    HDOJ 2058 The sum problem
    HDOJ 2099 整除的尾数
    HDOJ 2075 A|B?
    HDOJ 2071 Max Num
    HDOJ 2056 Rectangles
    HDOJ 2055 An easy problem
    HDOJ 2053 Switch Game
    HDOJ 2052 Picture
    P4139 上帝与集合的正确用法
  • 原文地址:https://www.cnblogs.com/oneshot/p/3980638.html
Copyright © 2011-2022 走看看