小A的组合数

题目描述

\(C_n^m\)表示组合,组合公式为:\(C_n^m=\frac{n!}{m!\times (n-m)!}\),请你求出\(C_n^m\)的因子个数\(tot\),由于大难会很大,请你输出的答案模上一个大数\(mod=10^9+7+cnt\)。\(cnt\)表示\(n!\)末尾\(0\)的个数。

题目解析

约数(因子)个数函数:

\[n=p^{k_1}_1p_2^{k_2}...p^{k_n}_n
\\
\tau (n)=(k_1+1)(k_2+1)(k_3+1)...(k_n+1)
\]

我们可以得到:

\(k_1=\frac{n}{p_1}+\frac{n}{p_1^2}+\frac{n}{p_1^3}+....+\frac{n}{p_1^j}\)

\(k_2=\frac{n}{p_2}+\frac{n}{p_2^2}+\frac{n}{p_2^3}+....+\frac{n}{p_2^j}\)

\(k_3=\frac{n}{p_3}+\frac{n}{p_3^2}+\frac{n}{p_3^3}+....+\frac{n}{p_3^j}\)

但是由于本题是分数,所以求出来的\(k\)还要减去\(m,n-m\)里面的\(k\)

接下来就是求出\(n!\)有最后有多少个零:

易得,\(10\)是由\(2*5\)得到的

由于阶乘中\(2\)一定比\(5\)多,所以我们仅需算出\(5^k\)中的\(k\)即可,接下来就和上面思路差不多了。

CODE

#include<bits/stdc++.h>
#define ll __int128
using namespace std;
const int maxn = 2e6+43;
inline ll read_int(){
ll a=0;bool f=0;char g=getchar();
while(g<'0'||'9'<g) {if(g=='-') f=1;g=getchar();}
while('0'<=g&&g<='9') a=a*10+g-'0',g=getchar();
return f ? -a : a;
} inline void write(ll a,bool b=1){
char lin[30];int top=0;
if(a<0) a=-a,putchar('-');
while(a){
lin[++top]=a%10+'0';
a/=10;
}
if(!top) lin[++top]='0';
while(top) putchar(lin[top--]);
if(b) putchar('\n');
} ll wu[100]={0,5,25,125,625,3125,15625,78125,390625,1953125,9765625};
int go=11;
ll mod=1e9+7,MOD; ll top=0,prime[maxn];
bool no[maxn];
inline void Prime(){
for(ll i=2;i<=2e6;i++){
if(!no[i]) prime[++top]=i;
for(ll e=1;e<=top&&prime[e]*i<=2e6;e++){
no[prime[e]*i]=1;
if(i%prime[e]==0) break;
}
}
} inline void read(){
ll n=read_int(),m=read_int();
ll cnt=0;
for(int i=1;i<=10;i++) cnt+=n/wu[i];
// cout<<cnt<<endl;
MOD=mod+cnt;
ll N=n,M1=m,M2=n-m;
ll ans=1;
for(int i=1;i<=top&&prime[i]<=n;i++){
ll k=0,jl=1;
for(int e=1;jl<=n;e++){
jl*=prime[i];
k=k+(N/jl-M1/jl-M2/jl);
}
// cout<<prime[i]<<" "<<k<<endl;
ans=ans*(k+1)%MOD;
}
write(ans);
} int main (){
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
Prime();
int T=read_int();
while(T--) read();
}

小A的组合数的更多相关文章

  1. 哈理工(HUST)第八届程序设计竞赛--小乐乐的组合数

    这道题目是一道数学题,我们可以假设n为7,m为14. 这样的话我们就可以很清晰地看到7和7可以拼接在一起,这是一对,然后是7和14拼接在一起,第二对. 我们可以直接让n/7,m/7,这样就是1*2,就 ...

  2. 洛谷 P2518 [HAOI2010]计数 (组合数)

    题面 luogu 题解 本来想练数位dp的,结果又忍不住写了组合数.. 去掉一个\(0\)可以看作把\(0\)移到前面去 那么题目转化为 \(n\)有多少个排列小于\(n\) 强制某一位比\(n\)的 ...

  3. [BZOJ 3209]花神的数论题

    一道简单的数位 dp 题 但是脑子里只有 __builtin_popcountll 了呢(自重) 看完题解后很快就理解了,而且有一种这么简单的题居然没想到做法真是不应该唉~的感觉 用 f[i] 表示 ...

  4. [数]数学系列预习->补水题ver.

    ---恢复内容开始--- 话说要学反演了,contest一题都搞不定,整理题目暂且搁置,数学笨蛋来学一下数学_(:з」∠)_ ---恢复内容结束--- 是的,预习看了半天教学,没有整理,做题又都不会, ...

  5. 动态规划,以LeetCode-CombinationSumIV问题为例

    简介: 动态规划问题面试中经常遇到的问题之一,按照动态规划的一般定义,其一般解法在于将大问题分解为很多小问题去解决,但是我在遇到很多实际的问题时,想法都是强行的去将问题分解,而忽略了分解的必要性和途径 ...

  6. 算法讲堂二:组合数学 & 概率期望DP

    组合数学 1. 排列组合 1. 加法原理 完成一列事的方法有 n 类,其中第 i 类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有 \(a_1 + a_2 + \cdots ...

  7. Codeforces 643F - Bears and Juice(思维题)

    Codeforces 题目传送门 & 洛谷题目传送门 首先直接暴力枚举显然是不现实的,我们不妨换个角度来处理这个问题,考虑这 \(R_i\) 个瓶子中每一瓶被哪些熊在哪一天喝过. 我们考虑对这 ...

  8. qbxt五一数学Day3

    目录 1. 组合数取模 1. \(n,m\le 200\),\(p\) 任意 2. \(n,m\le 10^6\),\(p\ge 10^9\) 素数 3. \(n,m\le 10^6\),\(p\le ...

  9. 【Gym 100947E】Qwerty78 Trip(组合数取模/费马小定理)

    从(1,1)到(n,m),每次向右或向下走一步,,不能经过(x,y),求走的方案数取模.可以经过(x,y)则相当于m+n步里面选n步必须向下走,方案数为 C((m−1)+(n−1),n−1) 再考虑其 ...

  10. hdu 4869 Turn the pokers(组合数+费马小定理)

    Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...

随机推荐

  1. 如何配置域名的 CNAME —— 添加记录集时,为什么会提示“与已有解析记录冲突”?

    参考: https://support.huaweicloud.com/dns_faq/dns_faq_016.html https://developer.qiniu.com/fusion/kb/1 ...

  2. 【转载】pip install 使用多个.local环境

    原文地址: https://zhuanlan.zhihu.com/p/351468170 ================================ 我们都知道anaconda可以安装不同的py ...

  3. 作业帮基于 DolphinScheduler 的数据开发平台实践

    摘要 随着任务数量.任务类型需求不断增长,对我们的数据开发平台提出了更高的要求.本文主要分享我们将调度引擎升级到 Apache DolphinScheduler 的实践经验,以及对数据开发平台的一些思 ...

  4. FAT32和NTFS文件系统的区别

    文件系统对于在计算设备上运行至关重要. 因此,选择正确的文件系统变得很重要. FAT32 和 NTFS 是两个具有显着差异的文件系统. 1.磁盘分区容量区别 NTFS可以支持的分区(如果采用动态磁盘则 ...

  5. 疫情远程办公Citrix XenDesktop 2203长期稳定版本虚拟云桌面部署教程

    下面列出来的是目录大纲,里面包含了Citrix完整搭建的教程,此次实验环境是利用Citrix XenDesktop 7.15 CU3长期稳定版虚拟桌面详细安装教程, 含PVS及UPM相关配置,期待视频 ...

  6. wifi基础(一):无线电波与WIFI信号干扰、衰减

    liwen01 2024.08.18 前言 无论是在产品开发还是在日常生活中,在使用无线网络的时候,都会经常遇到一些信号不好的问题,也会产生不少疑问: 为什么我们在高速移动的高铁上网络会变慢? 为什么 ...

  7. Linux 上的 AppImage、Snap、Flatpak 之间的区别和联系

    AppImage.Snap 和 Flatpak 是三种用于在 Linux 系统上分发和安装软件的包管理格式.它们都有助于解决软件依赖问题,使得应用程序可以在不同的 Linux 发行版上更容易地安装和运 ...

  8. chmod 使用

    数字 权限 4 (100) 读 2 (010) 写 1 (001) 执行 u 表示该文件的拥有者,g 表示该文件的拥有者所属的组,o 表示其他人,a 表示所有人. e.g. # 数字表示法 chmod ...

  9. 【Mac】之本地连接虚拟机linux环境

    上一篇安装完centos虚拟机之后,如何远程连接呢? 先进入虚拟机的界面: 发现没有bash 终端输入: # -bash :telnet:command not found # 发现是虚拟机没有安装 ...

  10. 【GaussDB】应用报错 socket is not closed; Urgent packet sent to backend successfully; An I/O error occured while sending to the backend.detail:EOF Exception;

    数据库原理差异 会话空闲时间超过sesseion_time后,数据库主动断开,客户端再发起请求,就会报此类错误: 当一个会话连接长时间没有执行SQL或者活动时,会将该会话释放,可以释放缓存避免出现例如 ...