zoukankan      html  css  js  c++  java
  • 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 } 

  • 相关阅读:
    Vue--路由
    Vue -- 双向过滤器去除html标签
    SQL表的基本操作
    .NET面试题
    MVC Razor
    MVC aspx
    CSS修改滚动条样式
    C# 制作图片验证码
    上传图片加水印
    eclipse常用快捷键
  • 原文地址:https://www.cnblogs.com/acvc/p/3571360.html
Copyright © 2011-2022 走看看