【原子工具】快速幂 快速乘

题幂算.一切即1
阴阳迭变积微著,叠浪层峦瞬息功
莫道浮生千万事,元知万象一归宗

文章目录

  • 快速幂
    • 原始快速幂(O(logn))
      • 二分递归形式
      • 非递归形式
    • 模下意义的快速幂(O(logn))
      • 二分递归形式
      • 非递归形式
  • 快速乘
    • 龟速乘(O(logn)
      • 递归式
      • 非递归式
    • 快速乘(光速乘)(O(1))
  • 文献参考
  • 总结


快速幂

原始快速幂(O(logn))

二分递归形式

#include<bits/stdc++.h>
using namespace std;#define ll long long ll q_pow(ll base,ll exp)
{if(exp == 0) return 1;ll res = q_pow(base,exp/2);if(exp & 1) return res*res*base;return res*res;
}int main()
{ll a,b;cin >> a >> b; cout << q_pow(a,b);
}

非递归形式

#include<bits/stdc++.h>
using namespace std;#define ll long long ll q_pow(ll base,ll exp)
{ll res = 1;while(exp){if(exp & 1){res = res * base; }base = base * base;exp >>= 1;}return res;
}int main()
{ll a,b;cin >> a >> b; cout << q_pow(a,b);
}

模下意义的快速幂(O(logn))

例题 : 洛谷P1226

二分递归形式

#include<bits/stdc++.h>
using namespace std;#define ll long long ll q_pow(ll base,ll exp,ll digit)
{if(exp == 0) return 1;base %= digit;ll res = q_pow(base,exp/2,digit);if(exp & 1) return (res*res)%digit*base%digit;return res*res%digit;
}int main()
{ll a,b,c;cin >> a >> b >> c; cout << a << "^" << b << " mod " << c << "=" << q_pow(a,b,c);
}

非递归形式

#include<bits/stdc++.h>
using namespace std;#define ll long longll q_pow(ll base,ll exp,ll digit)//一般来说digit写成mod多一点个人习惯
{base %= digit;ll res = 1;while(exp){if(exp & 1){res = res * base % digit; }base = base % digit * base % digit;exp >>= 1;}return res;
}int main()
{ll a,b,c;cin >> a >> b >> c; cout << a << "^" << b << " mod " << c << "=" << q_pow(a,b,c);
}

快速乘

龟速乘(O(logn)

递归式

#include <bits/stdc++.h>
using namespace std;#define ll long long
const int mod = 500;ll q_mul(ll a, ll b)
{if (b == 0) return 0;ll res = q_mul(a, b / 2);if (b & 1) return (res + res + a) % mod;//龟速乘的目的就是为了处理大数相乘使用使用modreturn (res + res) % mod;
}int main()
{ll a, b;cin >> a >> b;cout << q_mul(a, b);
}

非递归式

#include <bits/stdc++.h>
using namespace std;#define ll long long
const int mod = 500;ll q_mul(ll a, ll b)
{a % mod;ll res = 0;while (b){if (b & 1){res = (res + a) % mod;}a = (a + a) % mod;b >>= 1;}return res;
}int main()
{ll a, b;cin >> a >> b;cout << q_mul(a, b);
}

快速乘(光速乘)(O(1))

不是特别卡常数不建议使用,可能会有计算错误

#include <bits/stdc++.h>
using namespace std;#define ll long long
#define ld long double
const int mod = 1e5;ll q_mul(ll a, ll b)//非压行版
{ld temp = (ld)a * b / mod;ll q = (ll)temp * mod;return (a * b - q + mod) % mod;
}
ll q_mul(ll a, ll b)
{return (a * b - ((ll)((ld)a * b) / mod)*mod + mod) % mod;
}int main()
{ll a, b;cin >> a >> b;cout << q_mul(a, b);
}

记忆锚点 :
q = (ld)a * b / mod
(a * b − ( ll)q * mod + mod) % mod


文献参考

【OI Wiki - 快速幂】
CSDN -【谈谈知识点】快速幂&龟速乘&快速乘


总结

阴阳二进制的火花在递归中迭变,模数宇宙的涟漪于位运算里震荡。代码中的每一个移位都是对混沌的降维打击,递归栈底的return 1如同宇宙大爆炸的奇点,从虚无中诞生万千可能。新手当知:算法修炼是铸剑过程,递归与迭代是阴阳双刃,调试时的报错声恰是淬火的嘶鸣。 无论指数如何膨胀,终将拆解为二进制的星辰;纵使乘数浩如烟海,亦可化作位运算的细沙。记住,你写的不是代码,而是将混沌世界重构成数学之美的炼金术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件基础IO

理解"文件" 1-1 狭义理解 文件在磁盘里磁盘是永久性存储介质&#xff0c;因此文件在磁盘上的存储是永久性的磁盘是外设&#xff08;即是输出设备也是输入设备&#xff09;磁盘上的文件 本质是对文件的所有操作&#xff0c;都是对外设的输入和输出简称IO 1-2 广义理…

Unity 简易的UI框架

核心内容 UIType.cs namespace MYTOOL.UI {/// <summary>/// UI层级/// </summary>public enum UILayer{/// <summary>/// 主界面层/// </summary>MainUI 0,/// <summary>/// 普通界面层/// </summary>NormalUI 1,/// <summary>/…

VUE2双向绑定的原理

文章目录 VUE2双向绑定的原理1. 什么是双向绑定2. 双向绑定的原理2.1 ViewModel的重要作用2.2 双向绑定的流程 3. 双向绑定的实现3.1 data响应化处理3.2 Compile编译3.3 依赖收集 VUE2双向绑定的原理 1. 什么是双向绑定 讲双向绑定先讲单项绑定&#xff0c;啥叫单项绑定&…

4G核心网的演变与创新:从传统到虚拟化的跨越

4G核心网 随着移动通信技术的不断发展&#xff0c;4G核心网已经经历了从传统的硬件密集型架构到现代化、虚拟化网络架构的重大转型。这一演变不仅提升了网络的灵活性和可扩展性&#xff0c;也为未来的5G、物联网&#xff08;LOT&#xff09;和边缘计算等技术的发展奠定了基础。…

云计算——AWS Solutions Architect – Associate(saa)1、什么是云,AWS介绍

什么是云? 什么是云? 云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式&#xff0c;通常涉及通过互联网来提供动态易护展且经常是虚拟化的资源。云是网络、互联网的一种比喻说法。 简单理解为&#xff1a;云是 共享资源&#xff0c;按需付费&#xff0…

HTML排版标签、语义化标签、块级和行内元素详解

目录 前言 一、HTML中的排版标签 1. 文本相关标签 1.1 标题标签 ~ 1.2 段落标签 1.3 强调和加粗 1.4 换行标签 1.5 水平线标签 二、HTML中的语义化标签 2.1 语义化标签概述 2.2 常见的语义化标签 示例&#xff08;核心代码部分&#xff09;&#xff1a; 三、HTM…

【字节青训营-7】:初探 Kitex 字节微服务框架(使用ETCD进行服务注册与发现)

本文目录 一、Kitex概述二、第一个Kitex应用三、IDL四、服务注册与发现 一、Kitex概述 长话短说&#xff0c;就是字节跳动内部的 Golang 微服务 RPC 框架&#xff0c;具有高性能、强可扩展的特点&#xff0c;在字节内部已广泛使用。 如果对微服务性能有要求&#xff0c;又希望…

【数学】矩阵、向量(内含矩阵乘法C++)

目录 一、前置知识&#xff1a;向量&#xff08;一列或一行的矩阵&#xff09;、矩阵1. 行向量2. 列向量3. 向量其余基本概念4. 矩阵基本概念5. 关于它们的细节 二、运算1. 转置&#xff08;1&#xff09;定义&#xff08;2&#xff09;性质 2. 矩阵&#xff08;向量&#xff0…

TCP/IP 邮件

TCP/IP 邮件 引言 在互联网技术飞速发展的今天,电子邮件(Email)已成为人们日常工作和生活中不可或缺的通信工具。TCP/IP协议作为互联网通信的基础,为电子邮件的传输提供了强大的技术支持。本文将详细介绍TCP/IP在电子邮件传输过程中的作用,以及相关的协议和实现方式。 …

离线安装Appium Server

1、问题概述? 安装Appium通常有两种方式: 第一种:下载exe安装包,这种是Appium Server GUI安装方式,缺点是通过命令启动不方便。 第二种:通过cmd安装appium server,可以通过命令方式启动,比较方便。 问题:在没有外网的情况下,无法通过命令在cmd中安装appium server…

设计模式六大原则和单例模式

设计模式 目的 实现可重用解决方案&#xff0c;构筑易维护、可扩展的软件系统。 六大原则 单一职责&#xff1a; 类的职责单一&#xff0c;一个方法做一件事。 开闭原则&#xff1a; 拓展开放&#xff0c;修改关闭。 里氏替换&#xff1a; 父类能出现的地方&#xff0c;子…

浅尝yolo11全程记录1-准备环境+官网模型推理(个人备份)

准备工作&#xff08;虚拟环境、导入项目&#xff09; 安装Anaconda 主要是为了创建和管理虚拟环境&#xff0c;在pycharm里按照项目里的requirments.txt安装依赖的时候&#xff0c;使用虚拟环境会好很多&#xff08;我记得不用Anaconda也可以直接在pycharm的terminal里头创建…

5.攻防世界 fileinclude

进入题目页面如下 提示flag在flag.php ctrlu&#xff0c;查看源码 给出了一段PHP代码&#xff0c;进行代码审计 <?php // 检查是否开启了错误显示功能 if( !ini_get(display_errors) ) {// 如果没有开启&#xff0c;则将错误显示功能设置为开启状态ini_set(display_error…

深入浅出 NRM:加速你的 npm 包管理之旅

文章目录 前言一、NRM 是什么&#xff1f;二、为什么需要 NRM&#xff1f;三、NRM 的优势四、NRM 的安装与使用4.1 安装 NRM4.2 查看可用的 npm 源4.3 切换 npm 源4.4 测试 npm 源速度4.5 添加自定义 npm 源4.6 删除 npm 源 五、NRM 的进阶使用六、总结 前言 作为一名 JavaScr…

《C#之集训1-20121019c#基础》

&#xfeff;&#xfeff; C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。它是微软公司研究员Anders Hejlsberg的最新成果。 C#曾经的它在我眼中是很高大上的&#xff0c;一直没有目睹其风采&#xff0c;现在终于揭开了它神秘的面纱&#xf…

红包雨项目前端部分

创建项目 pnpm i -g vue/cli vue create red_pakage pnpm i sass sass-locader -D pnpm i --save normalize.css pnpm i --save-dev postcss-px-to-viewportpnpm i vantlatest-v2 -S pnpm i babel-plugin-import -Dhttps://vant.pro/vant/v2/#/zh-CN/<van-button click&…

蓝桥杯嵌入式备赛(三)—— LED +按键 + LCD

目录 一、LED1、原理图介绍2、程序代码 二、按键1、原理图介绍2、程序代码 三、LCD1、原理图介绍2、程序代码 一、LED 1、原理图介绍 如果所示&#xff0c;STM32G431RBT6中有八个LED&#xff0c;由八个GPIO控制&#xff0c;分别为PC8-15&#xff0c;当输出为低电平时点亮。其中…

深入剖析 HTML5 新特性:语义化标签和表单控件完全指南

系列文章目录 01-从零开始学 HTML&#xff1a;构建网页的基本框架与技巧 02-HTML常见文本标签解析&#xff1a;从基础到进阶的全面指南 03-HTML从入门到精通&#xff1a;链接与图像标签全解析 04-HTML 列表标签全解析&#xff1a;无序与有序列表的深度应用 05-HTML表格标签全面…

[Java基础]函数式编程

Lambda函数 JDK8新增的语法形式, 使用Lambda函数替代某些匿名内部类对象&#xff0c;从而让程序代码更简洁&#xff0c;可读性更好。 基本使用 lambda表达式只能简化函数式接口的匿名内部类写法 // 1.定义抽象类 abstract class Animal {public abstract void crt(); }publi…

Vue通过触发与监听事件进行数据传递: 子组件调用 $emit 方法来将数据传递给父组件。

文章目录 引言I 组件事件事件参数defineEmits 宏声明需要抛出的事件事件校验例子:子组件告诉父组件放大所有博客文章的文字II 【详细说明】 子组件通过触发一个事件,将数据传递给父组件调用内建的 `$emit `方法传入事件名称来触发一个事件子组件通过`this.$emit`来触发一个事…