题意:求一长度为y乘积为x的方案数,允许出现负数。
解题思路:我们先处理正数的,把x分解质因数,然后枚举每个质因数的次数,考虑把他们放进y个位置的方案数,就好比是将d个相同球放进y个位置,位置可以为空,为空就不好做,我们往每个位置都放一个球,问题就转变为将d+y个球放进y个位置,且位置不空,用隔板法很好做。由于乘法原理,将每个质因数的方案数乘起来,然后就是负数的情况,负数情况=(C(2,y)+C(4,y)±–+C(k,y))和正数加在一起就是2的y-1次。
代码:

#include<iostream>
#include<cstring>
using namespace std;
const int N=2000010;
typedef long long ll;
ll fact[N];
ll infact[N];
const int mod=1e9+7;
int prime[1010];
int cnt;
bool st[2020];
int qmi(int a,int b)
{int res=1;while(b){if(b&1)    res=1ll*res*a%mod;b>>=1;a=1ll*a*a%mod;}return res;
}
int C(int a,int b)
{//cout<<fact[a]<<' '<<endl;return fact[a]*infact[a-b]%mod*infact[b]%mod;
}
void init()
{fact[0]=1;infact[0]=1;for(int i=1;i<N;i++)fact[i]=1ll*fact[i-1]*i%mod;for(int i=1;i<N;i++)infact[i]=qmi(fact[i],mod-2);for(int i=2;i<=1010;i++){if(!st[i]){prime[cnt++]=i;}for(int j=0;i*prime[j]<=1010;j++){st[i*prime[j]]=true;if(i%prime[j]==0)break;}}
}
int main()
{init();int t;cin>>t;while(t--){int x,y;cin>>x>>y;ll res=1;//    cout<<cnt<<endl;for(int i=0;i<cnt;i++){if(prime[i]*prime[i]>x) break;if(x%prime[i]==0){int ct=0;while(x%prime[i]==0){x/=prime[i];ct++;}//cout<<C(3,2)<<endl;res=res*C(ct+y-1,y-1)%mod;//cout<<res<<endl;}}if(x!=1){res=res*y%mod;}cout<<res*qmi(2,y-1)%mod<<endl;}
}

组合数 Counting Arrays相关推荐

  1. [Codeforces 893E. Counting Arrays]排列组合

    [Codeforces 893E. Counting Arrays]排列组合 分类:combinatorics number theory math 1. 题目链接 [Codeforces 893E. ...

  2. Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays

    题目链接 题意:给你两个数x,yx,yx,y,让你构造一些长为yyy的数列,让这个数列的累乘为xxx,输出方案数. 思路:考虑对xxx进行质因数分解,设某个质因子PiP_iPi​的的幂为kkk,则这个 ...

  3. Codeforces 题目合集+分类+代码 【Updating...】【361 in total】

    961A - Tetris                                                模拟                                      ...

  4. Educational Codeforces Round 138 (Rated for Div. 2) A~D

    比赛链接:Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces 目录 A. Cowardly Roo ...

  5. 为什么数组是从0开始的

    背景 我们知道大部分编程语言中的数组都是从0开始编号的,即array[0]是数组的第一个元素.这个和我们平时生活中从1开始编号的习惯相比显得很反人类.那么究竟是什么样的原因让大部分编程语言数组都遵从了 ...

  6. python的array从0开始吗_为什么数组是从0开始的

    本文通过汇总一些网上搜集到的资料,总结出大部分编程语言中数组下标从0开始的原因 本博客已经迁移至: 本篇博文已经迁移,阅读全文请点击: 背景 我们知道大部分编程语言中的数组都是从0开始编号的,即arr ...

  7. CF EDU138 D(数论) ,牛练104C(DP) ,焦作F. Honeycomb(复杂建图,BFS最短路)

    一个感觉还不错的题 D. Counting Arrays 题意:当我们有一个数组,我们可以移除其和满足gcd(a[i],i)=1的元素(移除后自动补位).现在我们有一个数组b,b的每个元素规定了当前我 ...

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

  9. Educational Codeforces Round 138 (Rated for Div. 2)

    文章目录 一.A. Cowardly Rooks 二.B - Death's Blessing 三.C - Number Game 四.D - Counting Arrays 四.E - Cactus ...

  10. edu cf #138 Div.2(A~D)

    edu cf #138 Div.2 文章目录 edu cf #138 Div.2 [A. Cowardly Rooks](https://codeforces.com/contest/1749/pro ...

最新文章

  1. SpringBoot(四)-- 整合Servlet、Filter、Listener
  2. 计算机组成 面试 ---杂货铺
  3. 进程句柄表初始化,扩展,插入删除句柄源码分析
  4. 方式程0day MS17-010远程溢出漏洞测试
  5. LevelDB 源码剖析(六)WAL模块:LOG 结构、读写流程、崩溃恢复
  6. 回顾 | 进击吧! Blazor !第四期 组件开发
  7. HTML section元素
  8. wxPython控件学习之TextCtrl(二)多行及样式文本框
  9. 电商平台系统架构设计案例分析
  10. 【滤波器】基于matlab时变维纳滤波器设计【含Matlab源码 1870期】
  11. socket通信过程
  12. PR如何对裁剪之后的视频进行resize,指定到期望大小?
  13. Automation服务器不能创建对象--Excel.application
  14. SGU 244. Height, Bisector and Median
  15. 网上订鲜花怎么配送?鲜花配送为何首选顺丰同城急送?
  16. 【软件构造】equals()、hashCode()及引用等价性、对象等价性、观察等价性、行为等价性
  17. 阿里开源支持10万亿模型的自研分布式训练框架EPL
  18. vector 排序方法sort的使用
  19. 光猫tag/untag/transparent和路由器tag/untag/transparent测试
  20. 线电压和相电压,线电流和相电流的关系

热门文章

  1. 支付宝福利:银行卡信息查询
  2. python必考题_干货|Python经典面试考题(下)
  3. 安卓手机管理_安卓必备!!一个小工具干掉所有乱搞的APP,手机速度瞬间提升,管理后台应用...
  4. 求教lotka-volterra模型在matlab中的仿真模拟
  5. ieTEST停止工作bug修复
  6. xftp无法取消被动模式
  7. 大神之光照耀着我 - 我的成长之路 - 起点
  8. 联想电脑阻止c语言运行,联想电脑运行程序打不开怎么解决
  9. ios 裁剪圆形头像_iOS如何将图片裁剪成圆形
  10. OpenGL ES2.0 的三种变量类型(uniform,attribute和varying)