Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays
题目链接
题意:给你两个数x,yx,yx,y,让你构造一些长为yyy的数列,让这个数列的累乘为xxx,输出方案数。
思路:考虑对xxx进行质因数分解,设某个质因子PiP_iPi的的幂为kkk,则这个质因子的贡献就相当于把kkk个PiP_iPi放到yyy个盒子中,且盒子可能为空,方案为C(k+y−1,y)C(k+y-1,y)C(k+y−1,y),然后每个质因子的方案乘在一起即可。最后,因为负号也会出现,但xxx为正,所以就是在yyy个位置上选偶数个位置放负号,方案为2y−12^{y-1}2y−1再乘起来即可。
#include<bits/stdc++.h>#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_backusing namespace std;LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
LL lcm(LL a,LL b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
const int N = 2e6 +11;
const LL mod=1e9+7;
LL Fac[N+33],Inv[N+33];
int p[N+33],a[N+33],cnt;
void init(){Fac[0]=1;for(int i=1;i<=N;i++)Fac[i]=(Fac[i-1]*i)%mod;Inv[N]=powmod(Fac[N],mod-2,mod);for(int i=N-1;i>=1;i--)Inv[i]=(Inv[i+1]*(i+1))%mod;Inv[0]=1;
}
void P(){for(int i=2;i<N;i++){if(!p[i])a[++cnt]=i;for(int j=1;j<=cnt&&1ll*a[j]*i<N;j++){p[a[j]*i]=1;if(i%a[j]==0)break;}}
}
LL C(int x,int y){return 1ll*Fac[x]*Inv[y]%mod*Inv[x-y]%mod;
}
int main(){ios::sync_with_stdio(false);init();int t;P();for(cin>>t;t;t--){int x,y;cin>>x>>y;LL ans=1;for(int i=1;i<=cnt&&1ll*a[i]*a[i]<=x;i++){if(x%a[i]==0){int res=0;while(x%a[i]==0)res++,x/=a[i];ans=ans*C(res+y-1,y-1);ans%=mod;}}if(x>1)ans=ans*C(y,y-1)%mod;cout<<ans*powmod(2,y-1,mod)%mod<<endl;}return 0;
}
转载于:https://www.cnblogs.com/pubgoso/p/10759709.html
Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays相关推荐
- Educational Codeforces Round 33 (Rated for Div. 2)C.Rumor并查集
Educational Codeforces Round 33 (Rated for Div. 2)C.Rumor并查集 题意:首先用并查集把N个人分成几块,然后每个块当中选取一个最小权值 加到答案中 ...
- Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学
传送门 文章目录 题意: 思路: 题意: 给你一个数组aia_iai,定义一个数组是好的当且仅当对于所有iii都有ai!=ia_i!=iai!=i.定义f(a)f(a)f(a)表示数组aaa中i& ...
- Educational Codeforces Round 33 (Rated for Div. 2)
无奈只能打打虚赛... 一共写了4道题,但是d没在规定时间调出来. A. Chess For Three time limit per test 1 second memory limit per t ...
- Educational Codeforces Round 33 (Rated for Div. 2) B题
B. Beautiful Divisors Recently Luba learned about a special kind of numbers that she calls beautiful ...
- Educational Codeforces Round 80 (Rated for Div. 2) C. Two Arrays 组合数|dp
传送门 文章目录 题意: 思路: 题意: 给你n,mn,mn,m,让你构造两个数组a,ba,ba,b满足:1<=ai,bi<=n1<=a_i,b_i<=n1<=ai,b ...
- Educational Codeforces Round 138 (Rated for Div. 2) D
Educational Codeforces Round 138 (Rated for Div. 2) D. Counting Arrays 题意 给定长度为nnn的数组aaa,若gcd(ai,i)= ...
- Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)
Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...
- Educational Codeforces Round 100 (Rated for Div. 2)
文章目录 Educational Codeforces Round 100 (Rated for Div. 2) A. Dungeon B. Find The Array C. Busy Robot ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
最新文章
- facebook新无监督论文-Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
- FD.io/VPP — VNF 应用场景
- python 自定义异常类
- linux 16.04系统下载,ubuntu16.04下载|ubuntu 16.04 官方完整版-520下载站
- 如何快速开发一个 Dubbo 应用?(含沙龙报名)
- 前端网页发布到nginx_通过nginx部署前端代码实现前后端分离
- 读史知今、以史为鉴 【技术商业化】
- java 如何执行dig 命令_linux dig 命令使用方法
- 通用高效分页存储过程
- 【一周头条盘点】中国软件网(2018.7.2~2018.7.6)
- ABAP TRANSPORTING NO FIELDS 用法
- sqlserver和mysql定时同步_通过作业,定时同步两个数据库_sqlserver
- 有房间匹配和无房间匹配
- 第14课:Spark 分布式模型训练及调优(实战)
- gcc命令行选项说明
- c语言录入信息后无法显示桌面,输入法在桌面不显示,怎么修改能显示在桌面任 – 手机爱问...
- R语言caret机器学习(一)数据可视化:绘制特征变量图
- JAVA中如何精确取到时间间隔
- Qt6实战教程:媒体播放器示例
- c语言温度换算作业,[编程入门]温度转换 (C语言代码)