首页 > 其他分享 >求解组合数(省时间)

求解组合数(省时间)

时间:2022-11-08 18:47:07浏览次数:25  
标签:组合 求解 int res LL num 时间 ans mod

组合数的求解

将n的阶乘和x ^ mod - 2(1 <= x <= 2000000)都初始化出来,大约可以减少一半以上的时间(具体不太清楚,应该会随着n的变化而变化)

代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int N = 2e6 + 5; 
const LL mod = 1e9 + 7;

LL num[N];
LL ans[N];
//快速幂
LL qpow(LL a, LL b) {
	LL res = 1;
	
	while (b) {
		if(b & 1) res = res * a % mod;
		b >>= 1;
		a = a * a % mod;
	}
	
	return res;
} 

void init() {
	num[1] = 1;
	for (int i = 2; i <= 2000000; i ++ ) {
		num[i] = (num[i - 1] * i) % mod;
	}
	
	ans[2000000] = qpow(num[2000000], mod - 2) % mod;
	
	for (int i = 2000000; i >= 1; i -- ) {
		ans[i - 1] = ans[i] * i % mod; 
	}
}

LL solve(LL m, LL n) {
	return num[n] * ans[m] % mod * ans[n - m] % mod;
}

int main() {
	int t;
	cin >> t;
		
	//将n的阶乘和x ^ mod - 2(1 <= x <= 2000000)都初始化出来,大约可以减少一半以上的时间 
	init(); 
		
	while (t -- ) {
		int n;		
		scanf("%d", &n);
		
		if(n == 1) {
			cout << "1 1" << endl;
			continue;
		}
		
		printf("%lld %lld\n", solve(n - 1, 2 * n), (solve(n, 2 * n) - solve(n - 1, 2 * n) + mod) % mod);  
	}	
	
	
	
	
	return 0;
}

标签:组合,求解,int,res,LL,num,时间,ans,mod
From: https://www.cnblogs.com/luoyefenglin/p/16870770.html

相关文章

  • Centos修改系统时间
    Centos系统,必须同时修改系统时间和硬件时间,才可以保证修改有效,单纯的使用date命令修改系统时间,是立即生效,重启后系统还原。具体操作如下:1.date{查看目前本地的时间}2.hwc......
  • 关闭el-date-picker时间选择
    关闭el-date-picker时间选择功能问题:下拉滚动条,el-date-picker还是展开状态期望:下拉滚顶条让el-date-picker关闭。解决方案:监控滚动高度,当滚动条高度大于0,调用th......
  • Golang 实现时间戳和时间的转化
    何为时间戳:时间戳是使用数字签名技术产生的数据,签名的对象包括了原始文件信息、签名参数、签名时间等信息。时间戳系统用来产生和管理时间戳,对签名对象进行数字签名产生时......
  • 怎么使用jstat命令,监控jvm运行情况? 怎么了解jvm中 full gc执行的次数,和每次执行的时间
     【命令行实操—实战流程笔记】首先使用dockerexec命令进入正在运行的,docker容器内部[root@10-128-4-191~]#dockerexec-it843ab2e3a635/bin/bashroot@843ab2......
  • 光电组合工业交换机中光口的光模块是否需要另配?
    杭州飞畅科技供应的工业交换机中,有全电口的工业交换机,也有光电自由组合的工业交换机,那么问题就来了,光口会有单模和多模的区别,就会涉及到光模块,那光模块是本身就含有光模块的......
  • 12种JS常用获取时间的方式
    在编程中,总会遇到各种各样的获取时间的要求,下面我们来看一下获取不同时间格式的方法有哪些?如果不记得的话建议收藏哦!1、获取当前的日期和时间方法:newDate()​console.log(n......
  • 处理时间转换不正确-Springboot、springclound、feign、http请求
    SpringBoot、SpringCloud、feign、前后端时间解析不正确时,我们可以自定义HttpMessageConverters,以达到我们希望的结果参考链接:https://www.cnblogs.com/nhdlb/p/12783624.......
  • C++ 测代码运行时间的方法
    clock()函数(较为常用)在头文件time.h/ctime里面提供了一个函数clock()。函数返回的是从程序开始运行到调用clock函数时所打的点数,即clocktick(时钟打点),有一个常量CL......
  • vue3-组合式api-参数(props,context)及父子组件传值
    一、父组件<template> <div>  <h2>我是父组件</h2>  <div>counter:{{counter}}</div>  <button@click="callChildFun">调用子组件方法</button> ......
  • 「组合数学」隔离区
    本题是组合数学中的卡特兰数问题,此处给出了用分治思想推出卡特兰数递推公式的分析思路.我们先来看一下这题的题面.题面题目描述西安发生新冠疫情了。不少人进了隔离......