FOJ 2020 组合(组合数取素数摸模板:Lucas)

UML实战指南:用例图、类图、状态图、时序图核心应用与避坑 在软件工程与系统设计中,建模是理解复杂系统、清晰表达设计意图的基础。统一建模语言(UML)作为国际标准,其核心价值在于提供了一套可视化的规范,将抽象的概念、静态结构与动态行为转化为直观的图形,从而在团队协作、架构设计和代码实现前达成共识,有效降低沟通成本与设计缺陷。从技术原理看,UML通过用例图界定系统边界,类图描绘静态结构,状态图刻画对象生命周期,时序图揭示对象协作流程,共同构成了描述软件系统多视角的完整框架。掌握这些核心图表,不仅能提升文档质量,更能驱动更稳健的架构设计,尤其在微服务、嵌入式开发及复杂业 阅读详情


Link:http://acm.fzu.edu.cn/problem.php?pid=2020


Problem 2020 组合

Accept: 776    Submit: 1849
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数。例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m)很大!于是xiaobo希望你输出 C(n,m) mod p的值!

 Input

输入数据第一行是一个正整数T,表示数据组数 (T <= 100) 接下来是T组数据,每组数据有3个正整数 n, m, p (1 <= m <= n <= 10^9, m <= 10^4, m < p < 10^9, p是素数)

 Output

对于每组数据,输出一个正整数,表示C(n,m) mod p的结果。

 Sample Input

25 2 35 2 61

 Sample Output

110

 Source

FOJ有奖月赛-2011年04月(校赛热身赛)



AC code:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#define LL long long
#define MAXN 1000010
using namespace std;
const  int N=20;//模方程数 
LL a[N],mod[N];
/*LL mul(LL a,LL b,LL mod)//a*b%mod
{
	LL ans=0;
	while(b){
		if(b&1)
			ans=(ans+a)%mod;
		b>>=1;
		a=(a+a)%mod;
	}
	return ans;
}
*/
LL quick_mod(LL a,LL b,LL m)//a^b%m 
{
	LL ans=1;
	a%=m;
	while(b)
	{
		if(b&1)
		{
			ans=ans*a%m;
		}			
		b>>=1;
		a=a*a%m;
	}
	return ans;
}

LL getC(LL n,LL m,int cur)//C(n,m)%mod[cur]
{
	LL p=mod[cur];
	if(m>n)
		return 0;
	if(m>n-m)
		m=n-m;
	LL ans=1;
	for(int i=1;i<=m;i++)
	{
		LL a=(n+i-m)%p;
		LL b=i%p;
		//ans=mul(ans,mul(a,quick_mod(b,p-2,p),p),p);//p为素数,i对p的逆元可以不用扩张欧几里得进行求解  re=i^(P-2) 
		//ans=(ans*(a*quick_mod(b,p-2,p))%p)%p;
		ans = ans * (a * quick_mod(b, p-2,p) % p) % p;  
	}
	return ans; 
}

LL Lucas(LL n,LL k,int cur)//求C(n,k)%mod[cur] 
{
	LL p=mod[cur];
	if(k==0)
		return 1%p;
	//return getC(n%p,k%p,cur)*Lucas(n/p,k/p,cur)%p;
	return getC(n % p, k % p,cur) * Lucas(n / p, k / p,cur) % p;  
}

/*void extend_Euclid(LL a,LL b,LL &x,LL &y)
{
	if(b==0)
	{
		x=1;
		y=0;
		return;
	}
	extend_Euclid(b,a%b,x,y);
	LL tmp=x;
	x=y;
	y=tmp-a/b*y;
}

LL CRT(LL a[],LL m[],int k)//求C(n,m)%M,其中M=(m0*m2*…*m(k-1)),mi为素数,则先用a[i]存储模方程C(n,m)%mi,
{                           //m[]存储所有素数因子mi,k表示总共有k个模方程,返回C(n,m)%M的值 
	LL M=1;
	LL ans=0;
	for(int i=0;i<k;i++)
		M*=mod[i];
	for(int i=0;i<k;i++)
	{
		LL x,y,tmp;
		LL Mi=M/m[i];
		extend_Euclid(Mi,m[i],x,y);
		if(x<0)
		{
			x=-x;
			tmp=mul(Mi,x,M);
			tmp=mul(tmp,a[i],M);
			tmp=-tmp;
		}
		else
		{
			tmp=mul(Mi,x,M);
			tmp=mul(tmp,a[i],M);
		}
		ans=(ans+tmp)%M;
	}
	while(ans<0)
		ans+=M;
	return ans;
}*/

int main()
{
	//freopen("D:\\in.txt","r",stdin);
	int T;
	scanf("%d",&T);
	while(T--)
	{
		LL n,m;
		int k;
		scanf("%lld%lld",&n,&m);
		k=1;
		for(int i=0;i<k;i++)
			scanf("%lld",&mod[i]);
		for(int i=0;i<k;i++)
			a[i]=Lucas(n,m,i)%mod[i];
		printf("%I64d\n",a[0]);
	}
  	return 0;
}


素数猜想(ACM题) 素数猜想(ACM题)素数猜想(ACM题)素数猜想(ACM题)素数猜想(ACM题)素数猜想(ACM题)素数猜想(ACM题)素数猜想(ACM题)素数猜想(ACM题)素数猜想(ACM题)素数猜想(ACM题) 立即下载

相关推荐

NBIS单细胞教程:差异基因(五)

此文章是通过学习瑞典国家生物信息学基础设施(NBIS) 所开放的单细胞分析教程加上网上所查找的资料,自身的理解所形成的,可能会有不足之处。该部分是对不同集群之间的差异基因进行分析。参考来源:https://github.com/NBISweden/workshop-scRNAseq/blob/master/labs/seurat/seurat_05_dge.Rmd感兴趣的话可以阅读原文。

songyi10的博客 1万+

组合(Lucas)

Description 给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数。例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m)很大!于是xiaobo希望你输出 C(n,m) mod p的值! Input 输入数据第一行是一个正整数T,表示数据组数 (T Output 对于每组数据,输出一个正整数,表

ivyChen的专栏 665

【ros2】从零认识URDF:机器人模型描述的“说明书”

visual>子节点只负责机器人在RViz2中的可视化效果,不参与任何物理计算,就像给零件“穿衣服”。<origin>:定义零件的局部坐标系相对于连杆原点的位姿,参数xyz表示平移(单位:米),rpy表示旋转(单位:弧度,绕x→y→z轴旋转);<geometry>:定义零件的几何形状,支持四种基础形状+外部3D模型;<material>:定义零件的颜色,需要提前定义材质。常见几何形状示例-- 连杆名称:base_link(底座),全局唯一 --> < visual > <!

EnHengNa的博客 1610

FZU2020

题目题意很简单给你三个数 n m p求C n m %p由于p是不固定的,所以不能运用阶乘来打表这里运用到了Lucas定理定理的介绍:http://blog.youkuaiyun.com/ACdreamers/article/details/8037918对于 n m 较大的时候 Lucas定理就起到了作用AC代码:#include&lt;iostream&gt; using namespace std; ty...

Gipsy 406

知识导航神器:Obsidian Breadcrumbs 插件全攻略

Parent: 插件Child: Breadcrumbs 用法这样,它就能识别出你和其他笔记的关系。

m0_73735578的博客 1629

利用OTSU阈值算法在ZYNQ上实现浒苔识别

利用OTSU阈值算法进行图像二值化,结果用HDMI显示

qq_38075564的博客 1275

【递归入门】组合+判断素数

问题 C: 【递归入门】组合+判断素数 时间限制: 1 Sec  内存限制: 128 MB 题目描述 已知 n 个整数b1,b2,…,bn 以及一个整数 k(k<n)。 从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。 例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为:     3+7+12=22  3+7+19=2

smoggyxhdz的博客 3325

GRSL 2026 即插即用 | Transformer篇 | DCSA:动态稀疏门控自注意力,兼顾长距离依赖与局部细节表达!

SDANet整体架构和模块Dynamic Channel Sparse Attention (DCSA):DCSA为Transformer块中的自注意力层。DCSA架构:样本级动态稀疏注意力:首次实现每个样本独立预测注意力稀疏度:通过轻量门控网络根据输入特征的复杂度自适应调整保留的通道数,简单样本使用更高稀疏度(如保留 20% 通道),复杂样本使用更低稀疏度(如保留 80% 通道),在保证精度的前提下平均计算量降低 50% 以上。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 108

组合+判断素数

题目描述 已知 n 个整数b1,b2,…,bn 以及一个整数 k(k<n)。 从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。 例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为:     3+7+12=22  3+7+19=29  7+12+19=38  3+12+19=34。   现在,要求你计算出和为素数共有多少种。 例如上例,...

BodyCsoulN的博客 699

MIKE水动力笔记7_实测数据与模型输出结果的拟合对比

上一博文【MIKE水动力笔记6】主要讲解如何自己制作实测数据的时间序列文件dfs0,而本博文讲解如何进行实测数据与模型输出结果的拟合对比。

晏长街的博客 1万+

运维简历优化指南,DeepSeek助您运维简历秒变高分!

例如,当掌握了新的运维技术,如 Serverless 架构的运维管理,就将其添加到简历的专业技能部分,并简要描述在相关项目中的应用情况和成果,如 “在 [项目名称] 中,负责 Serverless 架构的运维工作,成功实现了应用的低成本、高弹性运行,降低了运维成本 30%”。上传简历至 DeepSeek,并输入指令:“请根据以下岗位招聘要求,帮我重新解构我的简历,按照【教育背景→实习经历→项目经历→个人评价→技能证书】的模块,输出一份符合下述岗位的简历,提升我的求职竞争力。

大模型大数据攻城狮的专栏 1467

fzu 2020 Lucas 定理,组合数求模模板

Problem 2020 组合 Accept: 491    Submit: 1212 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description 给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数。例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m

风华绝代 1406

多体动力学分析软件:SIMPACK_(17).SIMPACK高级编程与脚本

自定义力和约束可以用于模拟更复杂和现实的物理场景。SIMPACK 提供了接口,允许用户通过 Python 脚本来实现自定义力和约束。以下是一个示例,展示如何定义一个自定义力函数并应用于模型。# 定义自定义力函数"""自定义力函数:param t: 时间:param position: 位置:param velocity: 速度:return: 力"""# 创建一个新的 SIMPACK 模型# 添加一个刚体# 添加一个关节# 添加一个自定义力# 设置仿真参数# 运行仿真。

kkchenjj的博客 1421

【FZU2020】【Lucas模板题】【求组合数取模】

传送门:Problem 2020 组合 描述: Problem 2020 组合 Accept: 969    Submit: 2348 Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description 给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数。例如C(5,2) =

魔笛手的博客 469

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

fzu 2020 Lucas 定理,组合数求模模板

Problem 2020 组合 Accept: 491 Submit: 1212 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description 给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数。例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m)很大!于是...

头秃程序员的日常 226

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[BZOJ1856][Scoi2010]字符串(卡特兰数+组合数学)

题目描述传送门题解答案Cnn+m−Cn+1n+mC_{n+m}^n-C_{n+m}^{n+1},模数是质数所以直接处理阶乘然后快速幂计算逆元就行 至于这个公式的推导可以参考卡特兰数的非常规分析 首先Cnn+mC_{n+m}^n是总的方案数,从中减去不合法的方案 对于一个不合法的方案,假设从第2k+1位开始不合法,那么之前一定有k+1个0,k个1,如果将0,1互换就变成了一共有n+1个1,m-1

zyf2000 852

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

5974 Problem C 【递归入门】组合+判断素数

问题 C: 【递归入门】组合+判断素数 时间限制: 1 Sec 内存限制: 128 MB 献花: 93 解决: 36 [献花][花圈][TK题库] 题目描述 已知 n 个整数b1,b2,…,bn 以及一个整数 k(k<n)。 从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。 例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为...

fantasydreams的专栏 1241

组合素数

组合素数 - nefu119 题意:求解C(2n,n)恰好被p整除多少次 由组合数公式可以将其转化为: (2 * n)!/(n! * n!) 则将题目转化为求解分子关于q的幂,减去分子关于q的幂 用公式 n!的素因子分解中素数p的幂为[n/p]+[n/p^2]+[n/p^3]...0 (p^t <= n) #include <iostream> #include <cs...

weixin_30932215的博客 254

1033: 递归3(组合+判断素数)

时间限制: 1 Sec 内存限制: 128 MB 提交: 1015 解决: 584 [提交][状态][讨论版] 题目描述 【题意】 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。 从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。 例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22 3

1222

Lucas定理简单运用的五题之hdu3037 hdu 3944 fzu 2020 zoj 3557 hdu4349

首先Lucas定理的定义及简单证明:选自初等数论第37页

u011481752的专栏 1063

【Lucas定理 && C(n, m)%p && 逆元】FZU - 2020 组合

Problem Description 求C(n,m) mod p的结果, 其中p是素数 思路: 参考博客 求逆元 a*x ≡ 1(mod p)。 因为p是素数,所以我们求逆元可以用费马小定理 和 欧拉定理 a^(p-1) ≡ 1(mod p) -&amp;gt; a*a^(p-2) ≡ 1(mod p)。所以a^(-1) = a^(p-2) 还有一种通用的求逆元方法,适合所有

ACMer 梁剑锋 的博客 439

真正成功地配置TheOS越狱开发环境

只需6个步奏即可 1:export THEOS=/opt/theossudo 2:sudo svn co http://svn.howett.net/svn/theos/trunk $THEOS 3:sudo curl -s http://dl.dropbox.com/u/3157793/ldid > /tmp/ldid 4:sudo cp /tmp/ldid $THEOS/bin/

u011280136的博客 505

FZU 2020

大整数取模,lucas 定理

z8853797的专栏 683

FZU 2020 组合(Lucas定理)

题目链接:FZU 2020 组合#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <climits> #include <cmath> #include <ctime> #include <cassert> #define IOS ios_b

ramay7 662

多边形重心问题

多边形重心问题 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一个多边形或一条线段或一个多边形和一个线段的连接后的图形; 如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形

youth_shouting的博客 1622

FZU 2020 组合 lucas

组合数取模的模板题 https://en.wikipedia.org/wiki/Lucas%27_theorem 这里有lucas的证明 说一下我对lucas的一点理解 lucas定理就是将C(m,n)分解为C(m1,n1)* C(m2,n2)* C(m3,n3)…….C(mk,nk) 其中m1+m2p+m3p^2+m3p^4+…..mkp^k=m n1+n2p+n3p^

humeay的博客 756
上一篇: hdu5446 Unknown Treasure(数论综合题:大组合数取大合数模:Lucas+CRT)
下一篇: DP?(数论+组合数学综合题:组合数性质+预处理+组合数取摸)
林下的码路
博客等级 码龄12年 295粉丝 506原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林下的码路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值