洛谷刷题 快速幂-[P3197]越狱(C++)

题目描述

监狱有 n 个房间,每个房间关押一个犯人,有 m 种宗教,每个犯人会信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。

答案对 100,003 取模。

输入格式

输入只有一行两个整数,分别代表宗教数 m 和房间数 n。

输出格式

输出一行一个整数代表答案。

输入输出样例

样例输入 #1

2 3

样例输出 #1

6

提示

样例输入输出 1 解释

| 状态编号 | 1 号房间 | 2 号房间 | 3 号房间 |
| :--------: | :--------: | :-------: | :--------: |
| 1 | 信仰 1 | 信仰 1 | 信仰 1 |
| 2 | 信仰 1 | 信仰 1 | 信仰 2 |
| 3 | 信仰 1 | 信仰 2 | 信仰 2 |
| 4 | 信仰 2 | 信仰 1 | 信仰 1 |
| 5 | 信仰 2 | 信仰 2 | 信仰 2 |
| 6 | 信仰 2 | 信仰 2 | 信仰 1 |

数据规模与约定

对于 100% 的数据,保证1≤m≤1e8,1≤n≤1e12。

知识点:快速幂、组合数学、容斥

代码

 

#include<bits/stdc++.h> 
using namespace std;
typedef long long ll;
const ll N=1e5+5;
const ll mod=100003;
ll temp1,temp2,ans;
ll qmi(ll a, ll k, ll p)
{
    ll res=1;//res为每一步得到的结果 
    while(k)
    {
        if(k&1)
		{
			res=(res*a)%p;//a就是a^(2^k) 
		}
        a=(a*a)%p;//每次平方 
        k>>=1;
    }
    return res;
}
int main()
{
	ll m,n;
	cin>>m>>n;
	temp1=qmi(m,n,mod);
	temp2=qmi(m-1,n-1,mod);
	temp2=(m%mod)*temp2%mod;
	ans=temp1-temp2;
	if(ans<0)
	{
		ans+=mod;
	}
	ans%=mod;
	cout<<ans<<endl; 
    return 0;
}

相关推荐

  1. 快速-[P3197]越狱C++)

    2024-04-07 15:22:08       36 阅读
  2. P3390 [模板] 矩阵快速 题解

    2024-04-07 15:22:08       36 阅读
  3. | P1706 全排列问题

    2024-04-07 15:22:08       38 阅读
  4. p2006p2006

    2024-04-07 15:22:08       67 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 15:22:08       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 15:22:08       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 15:22:08       87 阅读
  4. Python语言-面向对象

    2024-04-07 15:22:08       96 阅读

热门阅读

  1. LeetCode 869. 重新排序得到 2 的幂

    2024-04-07 15:22:08       45 阅读
  2. 算法练习----力扣每日一题------7

    2024-04-07 15:22:08       42 阅读
  3. C++初级---模板初阶

    2024-04-07 15:22:08       41 阅读
  4. 多线程(36)AtomicStampedReference

    2024-04-07 15:22:08       42 阅读
  5. 上升Chrome安装Vue插件vue-devtools

    2024-04-07 15:22:08       31 阅读
  6. 基于开源软件构建存储解决方案的思考

    2024-04-07 15:22:08       37 阅读