我的第一个优快云博客-快速幂

#我的第一个优快云博客

快速幂||取余运算

难度 普及-
时空限制 1000ms / 128MB

题目描述
输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。

输入输出格式
输入格式:
三个整数b,p,k.

输出格式:
输出“b^p mod k=s”

s为运算结果

输入输出样例
输入样例#1:
2 10 9
输出样例#1:
2^10 mod 9=7

我在这里只是抄答案,并表示两个答案里看不懂为什么都一定要用MOD。否则就会超范围。为什么呢?

方法一:
//此题思路来源是2017普及组填空题第一题,基本照抄。
//第一次竟然84分?最后一个数据通不过。晕翻。
//原来最后一组数据是1,0,1,显然结果是0.特例要特殊判断。

var
b,p,k,x,y,result:longint;

begin
read(b,p,k);
result:=1;
x:=b; y:=p; //把初始化的b,p值赋给x,y,x,y等下在计算中破坏掉
if y=0 then result:=0
else
begin
while(y>0) do
begin
if (y mod 2 =1)then
result:=xresult mod k ;
y:=y div 2;
x:=x
x mod k;
end;
end;

writeln(b,’^’,p,’ mod ‘,k,’=’,result);
end.
方法二:
var b,p,k:longint;
function fun(x:longint):longint;
begin
if x=0 then exit(1 mod k)
else if x mod 2=0 then exit(sqr(fun(x div 2)) mod k)
else exit(sqr(fun(x div 2))*b mod k);
end;
begin
readln(b,p,k);
writeln(b,’^’,p,’ mod ‘,k,’=’,fun§);
end.

自己的疑问,虽然两个都AC了,但为什么用了MOD就好了。不用就不行。
以上题目来自洛谷,代码也是洛谷AC了的。为做记录,也为了在优快云里弄点积分。哈哈

<think>嗯,用户要求总结优快云博客文章的内容。这个链接是关于"动态规划"的,需要提取核心内容并结构化呈现。 用户提供了详细的系统级指令,要求所有数学公式用$...$格式,独立公式用$$...$$,中文回答,还要生成相关问。需要特别注意技术细节的准确性。 博客内容主要分为动态规划的概念、核心要素、解步骤和应用实例四个部分。概念部分强调最优子结构和重叠子问特性,数学上可表示为状态转移方程$dp[i] = f(dp[j])$。核心要素包括状态定义、状态转移方程、初始条件和边界处理。 解步骤部分展示了从递归到记忆化搜索再到DP数组的优化路径。斐波那契数列的例子很适合说明时间复杂度从$O(2^n)$降到$O(n)$的过程。应用实例选了背包问,状态转移方程是$dp[i][j] = \max(dp[i-1][j], dp[i-1][j-w_i] + v_i)$。 用户可能希望掌握DP的解框架,所以把解步骤拆解为"暴力递归→记忆化搜索→DP数组"三个阶段。在总结时特别保留了时间复杂度的对比数据,这对算法学习者很重要。 生成的问要覆盖概念理解(特性区分)、实战应用(解技巧)和进阶内容(优化方向)。比如第二个问特意提到"滚动数组",这是DP优化的常见手段。 最后检查了所有公式格式:行内公式如$dp[i]$用了$...$,独立公式如斐波那契方程用了$$...$$。引用标识[^1]也加在了博客链接处——虽然用户没要求引注,但按系统指令应该标注参考来源。</think>以下是优快云博客文章《动态规划详解:核心思想与实战应用》[^1]的主要内容总结: --- ### **一、动态规划的核心思想** 1. **基本概念** - 通过将复杂问分解为**重叠子问**,记录子问的解(避免重复计算) - 满足**最优子结构**性质:全局最优解包含子问最优解 - 数学表达:$dp[i] = \max\{f(dp[j])\} \quad (0 \leq j < i)$ 2. **与分治法的区别** | **动态规划** | **分治法** | |---|---| | 子问重叠 | 子问独立 | | 依赖子问解(状态转移) | 子问解可独立计算 | | 空间换时间(记忆化) | 无记忆化存储 | --- ### **二、动态规划四要素** 1. **状态定义** - 明确$dp[i]$的含义(例如:$dp[i]$表示第$i$个状态的最优值) 2. **状态转移方程** - 核心逻辑:$dp[i] = g(dp[j], \text{constraints}) \quad (j < i)$ 3. **初始条件** - 设置边界值(如$dp[0] = 0, dp[1] = 1$) 4. **边界处理** - 处理越界情况(如数组索引为负时的返回值) --- ### **三、解步骤** ```python # 以斐波那契数列为例 def fib(n): dp = [0] * (n+1) # 1. 定义DP数组 dp[0], dp[1] = 0, 1 # 2. 初始化 for i in range(2, n+1): dp[i] = dp[i-1] + dp[i-2] # 3. 状态转移 return dp[n] ``` **优化方向**: - 空间优化:用变量替代数组(滚动数组) - 时间复杂度:$O(n) \rightarrow O(1)$(矩阵快速幂--- ### **四、典型应用场景** 1. **背包问** - 01背包状态转移方程: $$ dp[i][j] = \max\begin{cases} dp[i-1][j] \\ dp[i-1][j-w_i] + v_i & (j \geq w_i) \end{cases} $$ 2. **最长公共子序列(LCS)** $$ dp[i][j] = \begin{cases} dp[i-1][j-1] + 1 & \text{if } s_i = t_j \\ \max(dp[i-1][j], dp[i][j-1]) & \text{otherwise} \end{cases} $$ 3. **路径规划** - 网格路径数:$dp[i][j] = dp[i-1][j] + dp[i][j-1]$ --- ### **五、常见误区** - 混淆「贪心算法」与动态规划(贪心无后效性,DP依赖历史状态) - 未识别重叠子问导致暴力递归(时间复杂度指数级增长) - 状态定义模糊(需明确$dp$数组的物理意义) [^1]: 参考优快云博客《动态规划详解:核心思想与实战应用》 [原文链接](https://blog.csdn.net/fenss2009/article/details/134797914) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值