辗转相除的时间复杂度
这是辗转相除法,也叫欧几里得算法
欧几里得算法的时间复杂度我们认为是 的。
证法1
设
分为两种情况:
①
发现缩减速度大于等于2倍,问题规模缩小至少一半
② 即
考虑算两下,
发现辗转两次之后,问题规模也一定至少缩小了一半。
所以 ,忽略常数姑且算为
证法2
这个方法更为严谨,用斐波那契数列证明的,还没学会……
最后学会了一个斐波那契数列的快速算法,记录一下
pair<int, int> fib(int n) {
if (n == 0) return {0, 1};
auto p = fib(n >> 1);
int c = p.first * (2 * p.second - p.first);
int d = p.first * p.first + p.second * p.second;
if (n & 1)
return {d, c + d};
else
return {c, d};
}
分类:
数学:数学题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现