codeforces#232_div2_C On Number of Decompositions into Multipliers 数论 组合计数
2014-03-01 16:44
357 查看
题目地址:cf#232#div2#c
题目大意:给定正整数n,然后给你n个数,我们只需要这n个数的乘积,然后问可以分解成多少种n个数的乘积形式。
实际上就是先进行素因数分解,然后分配这些指数到n各地方去,即是n元不定方程的非负整数解问题。
然后就是组合数打表。 用map进行指数统计。
其中素数表只用打到10 ^5 到10^6 不超时但是很浪费
代码:
题目大意:给定正整数n,然后给你n个数,我们只需要这n个数的乘积,然后问可以分解成多少种n个数的乘积形式。
实际上就是先进行素因数分解,然后分配这些指数到n各地方去,即是n元不定方程的非负整数解问题。
然后就是组合数打表。 用map进行指数统计。
其中素数表只用打到10 ^5 到10^6 不超时但是很浪费
代码:
#include<iostream> #include<map> #include<vector> #include<cmath> using namespace std; const int mod=1000000007; int p[1000005]; vector<int> prime; void make_prime() { p[0]=1; p[1]=1; for(int i=2;i<=sqrt(100000);i++) if(p[i]==0) for(int j=i*i;j<=100000;j+=i) p[j]=1; for(int i=2;i<100000;i++) if(p[i]==0) prime.push_back(i); } long long c[15001][501]; void make_combo() { for(int i=0;i<15000;i++) { c[i][0]=1; } for(int i=0;i<15000;i++) for(int j=0;j<500&&j<=i;j++) c[i+1][j+1]=(c[i][j+1]+c[i][j])%mod; } int main() { make_prime(); make_combo(); map<int,int> exp; int cur; int n; cin>>n; for(int i=0;i<n;i++) { cin>>cur; for(int i=0;i<prime.size();i++) { while(cur%prime[i]==0) { cur/=prime[i]; exp[prime[i]]++; } } if(cur>1) { exp[cur]++; } } long long ans=1; map<int,int> ::iterator it; for(it=exp.begin();it!=exp.end();it++) ans=(ans*c[n+it->second-1][n-1])%mod; cout<<ans<<endl; }
相关文章推荐
- codeforces#232_div2_C On Number of Decompositions into Multipliers 数论 组合计数
- Codeforces Round #404 (Div. 2) D. Anton and School - 2(组合数学)
- Codeforces Round #404 (Div. 2) D. Anton and School - 2 排列组合好题
- Codeforces Round #324 (Div. 2) B. Kolya and Tanya(组合数学)
- Codeforces Round #324 (Div. 2) (B排列组合)(C贪心)(D哥德巴赫猜想 数论+暴力)
- Codeforces Round #324 (Div. 2) B. Kolya and Tanya 思维题 数论
- Codeforces Round 232 Div 1 C On Changing Tree 树状数组 或 线段树
- 【Codeforces Round 276 (Div 2)D】【数论 正难则反 枚举倍数 二分 O(nlogn)】Maximum Value n个数大数mod小数找最大余数
- Codeforces Round #144 (Div. 1), problem: (B) Table DP 组合数学
- Codeforces Round #430 (Div. 2) B. Gleb And Pizza(数论)
- Codeforces Round #232 (Div. 2)渣渣也写。
- Codeforces Round #232 (Div. 1) A 解题报告
- Codeforces Round #343 (Div. 2) -A. Far Relative’s Birthday Cake(组合+模拟)
- Codeforces Round #448 (Div. 2)D. String Mark(组合数学)
- Codeforces Round #382 (Div. 2)D. Taxes(数论知识)
- 【Codeforces Round 363 (Div 2) B】【水题 行列计数】One Bomb 炸弹人爆破游戏
- Codeforces Round #232 (Div. 2) B.On Corruption and Numbers(整数拆分)
- codeforces #232 div2 解题报告
- Codeforces Round #428 (Div. 2) ( 组合数学)
- [数论] Codeforces Round #324 (Div. 2)D. Dima and Lisa