2018-3-4——st(快速幂)

题目描述
给出一个结点数为 N 的无向完全图,即任意结点两两相连,且每条边长为1。LLJ想知道这个图的生成树个数。但这个数量太大了,LLJ 会懒得看,所以他只想看这个数量模 K 后的结果(若 K=0,输出-1即可)
注:生成树定义:在图中节点数为 N,边数为 N-1 的连通子图。

输入
输入共一行,两个非负整数 N K;

输出
输出共一行一个整数,即方案数模 K 后的结果。

样例输入
样例输入①
1 10
样例输入②
4 13
样例输入③
100 23
 
样例输出
样例输出①
1
样例输出②
3
样例输出③
3

这道题具体的原理我不知道,但一旦看到这种死也不知道怎么做的,可以列出一部分的特例,然后找出规律,正巧这道题有这样的规律:我们发现n=1时,结果为1=1×1;n=2时,结果为1=1×1;n=3时,结果为3=3×1;n=4时,结果为16=4×4.....。继续下去我们会发现有n个节点时,有n^(n-2)个可能。这时我们发现可以用快速幂解决这个问题,下面是快速幂的代码:

long long Pow(long long a, long long b)
{
	long long Ans = 1;
	while (b)
	{
		if(b & 1)
			Ans = Ans * a % MOD;
		a = a * a % MOD;
		b >>= 1;
	}
	return Ans;
}
这就是这道题的做法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值