Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays(组合数学)
来源:互联网 发布:淘宝网狗狗 编辑:程序博客网 时间:2024/05/17 06:53
原题链接:http://codeforces.com/contest/893/problem/E
首先质因子分解,然后问题就转化为了n种不同颜色的球,每个球Ai个,放到m个不同的盒子里,可以有空盒子,有多少种方法,然后再考虑正负问题即可,因为每种颜色相互独立,所以,每种颜色单独考虑,最后乘上2^(m-1),因为前m-1个数正负号可以随便选,最后一个数的正负号就确定了。
代码:
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN=2e6+5;const int MOD=1e9+7;bool vis[MAXN];ll fac[MAXN],inv[MAXN];ll pri[MAXN],fi[MAXN],tot;ll qpow(ll a,ll b){ll ans=1;a%=MOD; for(ll i=b;i;i>>=1,a=a*a%MOD) if(i&1)ans=ans*a%MOD; return ans;}ll C(ll n,ll m){ if(m>n||m<0)return 0; ll s1=fac[n],s2=inv[n-m]*inv[m]%MOD; return s1*s2%MOD;//费马小定理求逆元 }void init(){tot=0; memset(vis,false,sizeof(vis));fac[0]=1;for(ll i=1;i<MAXN;i++)//阶乘打表 fac[i]=fac[i-1]*i%MOD;inv[MAXN-1]=qpow(fac[MAXN-1],MOD-2);for(ll i=MAXN-2;i>=0;i--)inv[i]=inv[i+1]*(i+1)%MOD;for(int i=2;i<MAXN;i++) { if(!vis[i]) { pri[tot++]=i;fi[i]=i; } for(int j=0;j<tot&&i*pri[j]<MAXN;j++) {fi[i*pri[j]]=pri[j]; vis[i*pri[j]]=true; if(i%pri[j]==0) { break; } } }}void solve(){int n,m,cnt=0,last=0;ll ans=1;scanf("%d%d",&n,&m);while(n>1){if(fi[n]==last){cnt++;}else{ans=ans*C(cnt+m-1,m-1)%MOD;cnt=1;last=fi[n];}n/=fi[n];}ans=ans*C(cnt+m-1,m-1)%MOD;ans=ans*qpow(2,m-1)%MOD;printf("%lld\n",ans);}int main(){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);init();int q;scanf("%d",&q);while(q--){solve();}return 0;}
阅读全文
0 0
- Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays(组合数学)
- codeforces Educational Codeforces Round 33 (Rated for Div. 2)
- codeforces Educational Codeforces Round 33 (Rated for Div. 2)B
- Educational Codeforces Round 33 E. Counting Arrays
- Educational Codeforces Round 34 (Rated for Div. 2) E. Swapping Characters(暴力)
- Educational Codeforces Round 33 (Rated for Div. 2) C
- Educational Codeforces Round 33 (Rated for Div. 2)
- Educational Codeforces Round 33 (Rated for Div. 2)
- Educational Codeforces Round 33 (Rated for Div. 2) A
- Educational Codeforces Round 33 (Rated for Div. 2) B
- Educational Codeforces Round 33 (Rated for Div. 2) C
- Educational Codeforces Round 33 (Rated for Div. 2)
- Educational Codeforces Round 33 (Rated for Div. 2) 题解
- Educational Codeforces Round 33 (Rated for Div. 2) F
- Educational Codeforces Round 33 (Rated for Div. 2) F. Subtree Minimum Query (线段树)
- Educational Codeforces Round 34 (Rated for Div. 2) D
- Educational Codeforces Round 34 (Rated for Div. 2)
- Educational Codeforces Round 34 (Rated for Div. 2) D
- 【git】pull、fetch 区别
- android lowmemorykiller笔记
- Linux--Xshell脚本
- 【微信公众平台】获取Access Token的3种方式
- 如何将比Long类型更大数值字符串转化为整数
- Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays(组合数学)
- 关于未来科技的想象
- php-1
- jQuery ajax读取本地json文件
- AS 中 Plugin for Gradle 和 Gradle 之间的版本对应关系
- GCC15个命令汇总
- 关于keep-alive的几点疑惑
- 第五周项目3括号的匹配
- 1130. Infix Expression (25)