小A的组合数
小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\)的个数。
题目解析
约数(因子)个数函数:
\\
\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的组合数的更多相关文章
- 哈理工(HUST)第八届程序设计竞赛--小乐乐的组合数
这道题目是一道数学题,我们可以假设n为7,m为14. 这样的话我们就可以很清晰地看到7和7可以拼接在一起,这是一对,然后是7和14拼接在一起,第二对. 我们可以直接让n/7,m/7,这样就是1*2,就 ...
- 洛谷 P2518 [HAOI2010]计数 (组合数)
题面 luogu 题解 本来想练数位dp的,结果又忍不住写了组合数.. 去掉一个\(0\)可以看作把\(0\)移到前面去 那么题目转化为 \(n\)有多少个排列小于\(n\) 强制某一位比\(n\)的 ...
- [BZOJ 3209]花神的数论题
一道简单的数位 dp 题 但是脑子里只有 __builtin_popcountll 了呢(自重) 看完题解后很快就理解了,而且有一种这么简单的题居然没想到做法真是不应该唉~的感觉 用 f[i] 表示 ...
- [数]数学系列预习->补水题ver.
---恢复内容开始--- 话说要学反演了,contest一题都搞不定,整理题目暂且搁置,数学笨蛋来学一下数学_(:з」∠)_ ---恢复内容结束--- 是的,预习看了半天教学,没有整理,做题又都不会, ...
- 动态规划,以LeetCode-CombinationSumIV问题为例
简介: 动态规划问题面试中经常遇到的问题之一,按照动态规划的一般定义,其一般解法在于将大问题分解为很多小问题去解决,但是我在遇到很多实际的问题时,想法都是强行的去将问题分解,而忽略了分解的必要性和途径 ...
- 算法讲堂二:组合数学 & 概率期望DP
组合数学 1. 排列组合 1. 加法原理 完成一列事的方法有 n 类,其中第 i 类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有 \(a_1 + a_2 + \cdots ...
- Codeforces 643F - Bears and Juice(思维题)
Codeforces 题目传送门 & 洛谷题目传送门 首先直接暴力枚举显然是不现实的,我们不妨换个角度来处理这个问题,考虑这 \(R_i\) 个瓶子中每一瓶被哪些熊在哪一天喝过. 我们考虑对这 ...
- 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 ...
- 【Gym 100947E】Qwerty78 Trip(组合数取模/费马小定理)
从(1,1)到(n,m),每次向右或向下走一步,,不能经过(x,y),求走的方案数取模.可以经过(x,y)则相当于m+n步里面选n步必须向下走,方案数为 C((m−1)+(n−1),n−1) 再考虑其 ...
- hdu 4869 Turn the pokers(组合数+费马小定理)
Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...
随机推荐
- Jax计算框架的JIT编译的static特性
官方: https://jax.readthedocs.io/en/latest/notebooks/thinking_in_jax.html#jit-mechanics-tracing-and-st ...
- C# 命名空间和程序集 小记
前言 本文只是为了复习,巩固,和方便查阅,一些知识点的详细知识会通过相关链接和文献标记出来. 命名空间 1.1 概念 可以把命名空间看做字符串,他加在类名或类型名前面并且通过点进行分割 既然看做是字符 ...
- oracle利用job实现存储过程异步执行
1.背景 在实际开发中,我们可能会利用存储过程批量处理业务, 对应有些存储过程可能会执行很长时间,这时我们需要客户端点操作后,存储过程异步执行 具体实现如下 1.创建处理业务的存储过程:sp_test ...
- Android网页投屏控制从入门到放弃
背景 业务需要采集在app上执行任务的整个过程,原始方案相对复杂,修改需要协调多方人员,因而考虑是否有更轻量级的方案. 原始需求: 记录完成任务的每一步操作(点击.滑动.输入等) 记录操作前后的截图和 ...
- 【CDQ分治】[P5094 [USACO04OPEN] MooFest G 加强版
P5094 [USACO04OPEN] MooFest G 加强版 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc++.h> us ...
- springboot如何集成Prometheus如何暴露Histogram来获取P99等监控指标
背景 springboot如何集成Prometheus我这里不做详细描述,要想了解集成过程,可以参考一下博客: Spring Boot 使用 Micrometer 集成 Prometheus 监控 J ...
- 你还在手动操作仓库?这款 CLI 工具让你效率飙升300%!
前言 作为一名开发者,我经常会在 GitHub 和 Gitee 上 fork 各种项目.时间一长,这些仓库就会堆积如山,变成了"垃圾仓库".每次打开代码托管平台,看到那些不再需要的 ...
- Viper:强大的Go配置解析库
1 介绍 Viper是适用于Go应用程序的完整配置解决方案.它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式.目前Star 26.6k, 它支持以下特性: 设置默认值 从JSON.T ...
- 华为交换机S5700-52C-EI开启telnet服务
华为S5700交换机初始化和配置TELNET远程登录方法: 1,交换机开启Telnet服务 <Quidway>system-view #进入系统视图 [Quidway]telnet ser ...
- 记录_玩客云v1.0大坑!!!
刷机 短接后刷入uboot固件, 制作U盘镜像启动会出现莫名其妙的内存写入失败!!!!!!!!!!! 但是这并没坏 拆机 , 短接刷armbian v5.67 内核 3.10, 这个版本刷完后什么特 ...