洛谷刷题 快速幂-[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。

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

代码

cpp 复制代码
#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;
}
相关推荐
类球状19 分钟前
顺序表 —— OJ题
算法
Miraitowa_cheems44 分钟前
LeetCode算法日记 - Day 11: 寻找峰值、山脉数组的峰顶索引
java·算法·leetcode
Sammyyyyy1 小时前
2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
开发语言·javascript·node.js
CoovallyAIHub1 小时前
方案 | 动车底部零部件检测实时流水线检测算法改进
深度学习·算法·计算机视觉
CoovallyAIHub1 小时前
方案 | 光伏清洁机器人系统详细技术实施方案
深度学习·算法·计算机视觉
lxmyzzs1 小时前
【图像算法 - 14】精准识别路面墙体裂缝:基于YOLO12与OpenCV的实例分割智能检测实战(附完整代码)
人工智能·opencv·算法·计算机视觉·裂缝检测·yolo12
洋曼巴-young1 小时前
240. 搜索二维矩阵 II
数据结构·算法·矩阵
汉汉汉汉汉1 小时前
C++11新特性详解:从列表初始化到线程库
c++
William一直在路上1 小时前
Python数据类型转换详解:从基础到实践
开发语言·python
看到我,请让我去学习2 小时前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt