given a number sequence b 1,b 2…b n.
please count how many number sequences a 1,a 2,…,a n satisfy the condition that a 1*a 2*…a n=b 1*b 2…*b n (a i>1).
input
the input consists of multiple test cases.
for each test case, the first line contains an integer n(1<=n<=20). the second line contains n integers which indicate b 1, b 2,…,b n ( 1 < b i<=1000000, b 1*b 2*…*b n<=10 25).
output
for each test case, please print the answer module 1e9 + 7.
sample input
2 3 4
sample output
4hint
for the sample input, p=3*4=12.
here are the number sequences that satisfy the condition:
2 6
3 4
4 3
6 2題意: 給你一行a n個數,讓你找出有多少種相同長度的數的排列的乘積a的乘積相等,而且規定每個數都要大於0。
先分解質因數,因為相同質因素的乘積相等,而且質因素的乘積,決定了數的值,然後對於每個質因子的數量進行單獨的隔板法分配,但是這樣求出來的結果是包括1的,然後就是減掉 至少1個為1的數的排列,容斥一下就好。
#include
using
namespace
std;
const
int n = 1010;
typedef
long
long ll;
const
int mod = 1e9+7;
ll fac[n+100];
ll inv[n+100];
map mp;
const
int mp = 1e3+5;
int p[mp];
int prear,vis[mp];
ll qpow(ll a,ll b)
return res;
}void init()
inv[n]=qpow(fac[n],mod-2);
for(int i=n-1;i>=0;i--)
inv[i]=(inv[i+1]*(i+1))%mod;
}void prime_init()
}void func(int x)
}if(x!=1) mp[x]++;
}ll c(int a,int b)
ll fen(int a,int b)
int main()
ll ans=0;
for(int i=0;ifor(map
::iterator iter=mp.begin();iter!=mp.end();iter++)
if(i%2==0) ans+=res,ans%=mod;
else ans=(ans-res+mod)%mod;
}printf("%lld\n",ans);
}}
51Nod 1509 加長棒(隔板法 容斥)
思路 正面想似乎不大好想,本著正難則反的原則。我是看的題解 我們想組不成三角形的方案,然後用總的方案 不能組成的方案。總的方案數就是 使得 x y z l x y z l x y z l 的方案,這顯然可以用隔板法求,三個邊 相當於三個盒子,然後有l ll個球可以放到裡面,因為這裡是小於等於l ll...
Devu和鮮花(組合數學(隔板法,容斥)
傳送門 首先我們知道,把m個小球放進n個桶裡,桶可以為空的問題,答案是cal m n 1,n 1 在實際中有x1 a1,x2 a2,x3 a3 xn an等條件,此時就需要同時滿足這n個條件,也就是有的桶裡面的球超出了他的容量,所以就考慮容斥。也就是至少不滿足其中乙個條件的方案。就可以用總方案減去這...
hdu 4336 容斥原理
按照解題報告的提示,用容斥原理實現 for int j bg 1 j另解 概率dp,康哥指導的 include include includeusing namespace std double f 1 21 gl 22 int main int i,j,k,n double fz,fm while...