题目链接
题意:给你两个数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相关推荐

  1. Educational Codeforces Round 33 (Rated for Div. 2)C.Rumor并查集

    Educational Codeforces Round 33 (Rated for Div. 2)C.Rumor并查集 题意:首先用并查集把N个人分成几块,然后每个块当中选取一个最小权值 加到答案中 ...

  2. 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& ...

  3. Educational Codeforces Round 33 (Rated for Div. 2)

    无奈只能打打虚赛... 一共写了4道题,但是d没在规定时间调出来. A. Chess For Three time limit per test 1 second memory limit per t ...

  4. 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 ...

  5. 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 ...

  6. 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)= ...

  7. 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这个时候两 ...

  8. 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 ...

  9. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

最新文章

  1. facebook新无监督论文-Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
  2. FD.io/VPP — VNF 应用场景
  3. python 自定义异常类
  4. linux 16.04系统下载,ubuntu16.04下载|ubuntu 16.04 官方完整版-520下载站
  5. 如何快速开发一个 Dubbo 应用?(含沙龙报名)
  6. 前端网页发布到nginx_通过nginx部署前端代码实现前后端分离
  7. 读史知今、以史为鉴 【技术商业化】
  8. java 如何执行dig 命令_linux dig 命令使用方法
  9. 通用高效分页存储过程
  10. 【一周头条盘点】中国软件网(2018.7.2~2018.7.6)
  11. ABAP TRANSPORTING NO FIELDS 用法
  12. sqlserver和mysql定时同步_通过作业,定时同步两个数据库_sqlserver
  13. 有房间匹配和无房间匹配
  14. 第14课:Spark 分布式模型训练及调优(实战)
  15. gcc命令行选项说明
  16. c语言录入信息后无法显示桌面,输入法在桌面不显示,怎么修改能显示在桌面任 – 手机爱问...
  17. R语言caret机器学习(一)数据可视化:绘制特征变量图
  18. JAVA中如何精确取到时间间隔
  19. Qt6实战教程:媒体播放器示例
  20. c语言温度换算作业,[编程入门]温度转换 (C语言代码)

热门文章

  1. HDUOJ 1062 TEXT REVERSE
  2. 【转】DCOM远程调用权限设置
  3. JAVA-初步认识-第十三章-多线程(验证同步函数的锁)
  4. git 常用commands(转)
  5. [程序设计语言] 堆和栈的全面总结
  6. 建议11: 区别对待==和Equals
  7. [转]可伸缩系统的架构经验
  8. 看ExtJs API文档的阅读方法
  9. dump查询Java 状态
  10. 同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO