题目链接

题解:

对于上面和下面的式子进行分解质因数,然后看看上面的质因数个数减去下面的质因数个数能不能达到k的质因数的要求即可。

分解质因数的时候用对于阶乘分解质因数的常用方法:比如要求1999!中能分解出多少个5,那么就把1999不断的除以5,并且把得到的数相加即可。原因显然。

但是上面方法的复杂度是nnt,明显tle,考虑优化。发现当k固定之后,对于每个n和m是固定的,并且似乎是可以转移的。所以考虑预处理。

用c[i][j]表示\(C_i^j\)是不是符合要求。用g[i][j]表示当m为j,n从j到max满足条件的数量。f[i][j]表示n为1到i,m为1到j时满足条件的数量。

然后只要考虑出f[i][j]的转移即可,显然f[i][j]=f[i][j-1]+g[i][j]

然后只要O(1)查询即可,懒得现将询问读入再预处理,所以前面的预处理全都是到2000的。

代码:

#include<cstdio>
#include<iostream>
using namespace std;
const int N=2000+10;
int t,n,m,k,pre[N][10];
int sushu[10]={0,2,3,5,7,11,13,17,19};
int ksushu[10],kjs[10];
void fenk()
{
for(int i=1;i<=8;++i)
{
if(!k) break;
while(k%sushu[i]==0)
{
kjs[i]++;
k/=sushu[i];
}
} }
inline void work2(int x)
{
for(int i=1;i<=8;++i)
{
int xx=x;
while(xx)
{
xx/=sushu[i];
pre[x][i]+=xx;
}
}
return; }
int g[N][N],f[N][N],c[N][N];
inline int pd(int x,int y)
{
for(int i=1;i<=8;++i)
if(pre[x][i]-pre[y][i]-pre[x-y][i]<kjs[i]) return 0;
return 1;
}
inline int ps(int x)
{
if(x==2||x==3) return 1;
if(x%6!=5&&x%6!=1) return 0;
for(int i=5;i*i<=x;i+=6)
if(x%(i+2)==0||x%i==0) return 0;
return 1;
}
int main()
{
scanf("%d%d",&t,&k);
fenk();
for(int i=2;i<=2000;++i)
work2(i);
for(int i=1;i<=2000;++i)
for(int j=1;j<=i;++j)
if(pd(i,j))
c[i][j]=1;
for(int j=1;j<=2000;++j)
for(int i=j;i<=2000;++i)
g[i][j]=g[i-1][j]+c[i][j];
for(int i=1;i<=2000;++i)
for(int j=1;j<=i;++j)
f[i][j]=f[i][j-1]+g[i][j];
int x,y;
while(t--)
{ scanf("%d%d",&x,&y);
printf("%d\n",f[x][min(x,y)]);
}
return 0;
}

[luogu2822][组合数问题]的更多相关文章

  1. $Noip2016/Luogu2822$ 组合数问题

    $Luogu$ 看这题题解的时候看到一个好可爱的表情(●'◡'●)ノ♥ $Sol$ 首先注意到这题的模数是$k$.然而$k$并不一定是质数,所以不能用$C_n^m=\frac{n!}{m!(n-m)! ...

  2. LCM性质 + 组合数 - HDU 5407 CRB and Candies

    CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...

  3. 计算一维组合数的java实现

    背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...

  4. Noip2016提高组 组合数问题problem

    Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...

  5. C++单元测试 之 gtest -- 组合数计算.

    本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...

  6. NOIP2011多项式系数[快速幂|组合数|逆元]

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

  7. AC日记——组合数问题 落谷 P2822 noip2016day2T1

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  8. 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数

    1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...

  9. 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 95  Solved: 33[Submit][Statu ...

随机推荐

  1. keycloak 调研资料

    1.https://www.keycloak.org/docs/latest/server_development/index.html 下载keycloak 2.https://gitee.com/ ...

  2. 深入理解USB流量数据包的抓取与分析

    0x01 问题提出 在一次演练中,我们通过wireshark抓取了一个如下的数据包,我们如何对其进行分析? 0x02 问题分析 流量包是如何捕获的? 首先我们从上面的数据包分析可以知道,这是个USB的 ...

  3. WordPress更新时提示无法连接到FTP服务器的解决方案

    这几天在搭建主站的时候,更新wordpress时无法连接到FTP原因服务器 解决方法如下: 在WordPress目录下找到wp-config.php文件并编辑,在最后一行加上: define('FS_ ...

  4. 树莓派Opencv张正友棋盘标定法

    make.Makefile cc = gcc #最简易的makefile文件,这个可以用来进行文件之间的简易构建和链接,生成我们所需要的执行文件: prom = calc deps = $(shell ...

  5. Linux下Redis主从复制以及SSDB主主复制环境部署记录

    前面的文章已经介绍了redis作为缓存数据库的说明,本文主要说下redis主从复制及集群管理配置的操作记录: Redis主从复制(目前redis仅支持主从复制模式,可以支持在线备份.读写分离等功能.) ...

  6. 牛客训练赛25-A-最长区间

    https://www.nowcoder.com/acm/contest/158#question 这题问最长的严格连续递增序列的最长长度是多少? 最开始感觉这道题不可做,因为有1e5个点,还有1e5 ...

  7. jsp获取传过来的值

    request.setCharacterEncoding("utf-8"); String credit=request.getParameter("credit&quo ...

  8. Java web错误总结~

    1.java程序中没有错,但是项目上面显示一个红叉的解决办法 错误信息: 报Description  Resource Path Location Type Java compiler level d ...

  9. js/jquery禁止页面回退

    $(function() { //防止页面后退 history.pushState(null, null, document.URL); window.addEventListener('popsta ...

  10. 『编程题全队』Beta 阶段冲刺博客四

    1.提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID) (1) 昨天已完成的工作 孙志威: 1.新增添加提醒事项的按钮 2.添加了新建提醒框 3.测试了新的SubTask思 ...