• Codeforces Round #232 (Div. 2) C


    C. On Number of Decompositions into Multipliers
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    You are given an integer m as a product of integers a1, a2, ... an . Your task is to find the number of distinct decompositions of number m into the product of n ordered positive integers.

    Decomposition into n products, given in the input, must also be considered in the answer. As the answer can be very large, print it modulo1000000007 (109 + 7).

    Input

    The first line contains positive integer n (1 ≤ n ≤ 500). The second line contains space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 109).

    Output

    In a single line print a single number k — the number of distinct decompositions of number m into n ordered multipliers modulo 1000000007(109 + 7).

    input
    1
    15
    output
    1

      分析:用map存储每个素数的个数接着就是组合公式c(n+k-1,k-1),因为是乘法所以相当于往盒子里面放小球盒子可以为空。因此多出n个盒子

     1 #include<cstring>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<map>
     5 typedef long long LL;
     6 using namespace std;
     7 const int MAX =600;
     8 const int F = 1e6+10;
     9 const int MOD = 1e9+7;
    10 map<int , int > m;
    11 int a[MAX];
    12 LL c[30000][MAX];
    13 void getp(int n)
    14 {
    15     long long i;
    16     for(i=2;(long long)i*i<=n;i++)
    17     {
    18         while(n%i==0)
    19         {
    20             m[i]++;
    21             n/=i;
    22         }
    23     }
    24     if( n != 1 ) m[n]++;
    25 }
    26 void init()
    27 {
    28     c[0][0]=1;
    29     for(int i=0;i<20020;i++)
    30     {
    31         c[i][i]=c[i][0]=1;
    32         for(int j=1;j<=min(i,MAX);j++)
    33         {
    34             c[i][j]=(c[i-1][j]+c[i-1][j-1])%MOD;
    35         }
    36     }
    37 }
    38 int main()
    39 {
    40     int n;
    41     LL ans;
    42     while(scanf("%d",&n)==1)
    43     {
    44         m.clear(); ans=1;
    45         for(int i=0;i<n;i++)
    46         {
    47             scanf("%d",&a[i]);
    48             getp(a[i]);
    49         }
    50         init();
    51         //printf("s");
    52         for(map<int,int> ::iterator it=m.begin();it!=m.end();it++)
    53         {
    54             int k=it->second;
    55             ans=ans*c[k-1+n][n-1]%MOD;
    56         }
    57         printf("%I64d ",ans);
    58     }
    59     return 0;

    60 } 

  • 相关阅读:
    django-缓存的应用
    Faster-RCNN用于场景文字检测训练测试过程记录(转)
    faster-rcnn在ubuntu16.04环境下的超级详细的配置(转)
    Effective C++读书笔记(转)
    c++中的static,const,const static以及它们的初始化
    [leetcode]Validate Binary Search Tree 验证二叉搜索树
    二叉树的遍历方式(迭代)
    c++中string与int之间的相互转换
    c++中 cin,cin.get(),cin.getline(),getline()用法说明
    N皇后问题代码
  • 原文地址:https://www.cnblogs.com/acvc/p/3571360.html
Copyright © 2020-2023  润新知