【数论】约数

试除法求约数

时间复杂度 O(sqrt(n))。

核心思路是求到较小的约数时,将其对应的较大约数也可以直接求出来,

例如:a/b=c,b是a的余数,c也是a的余数

ps:注意b==c的情况,要注意去重

void solve() {int n; cin >> n;vector<int> ans;for (int i = 1; i <= n / i; i++) {if (n % i == 0) {ans.push_back(i);if (i != n / i) ans.push_back(n / i);//去重}}sort(ans.begin(), ans.end());for (auto x : ans) {cout << x << " ";}cout << endl;
}

前置知识,分解质因数

n = p_{1}^{\alpha 1}*p_{2}^{\alpha 2}*(...)*p_{k}^{\alpha k}

p是质因数

void solve() {int n; cin >> n;map<int, int> mp;int c; cin >> c;for (int i = 2; i <= c / i; i++) {while (c % i == 0) {c /= i;mp[i]++;}}if (c > 1) mp[c]++;//如果c本身就是质数,例如7,//那么它就大于sqrt(c),因此要特判}

约数个数

假设现在有一个n,它可以被分解为n = p_{1}^{\alpha 1}*p_{2}^{\alpha 2}*(...)*p_{k}^{\alpha k}

假设d是n的一个约数,d可以被分解为 d =  p_{1}^{\beta 1}*p_{2}^{\beta 2}*(...)*p_{k}^{\beta k}

那么\beta i的不同,表示的约数也就不同。且 0<=\beta i<=\alpha i

因此会有(\alpha 1+1)*(\alpha 2+1)*(...)*(\alpha k+1)个约数。

const int mod = 1e9 + 7;
void solve() {int n; cin >> n;map<int, int> mp;while (n--) {int c; cin >> c;for (int i = 2; i <= c / i; i++) {while (c % i == 0) {c /= i;mp[i]++;}}if (c > 1) mp[c]++;}int res = 1;for (auto it : mp) {res = res * (it.second + 1) % mod;}cout << res << endl;
}signed main()
{int t; t = 1;//cin >> t;while (t--) {solve();}return 0;
}

约数之和

前置知识:秦九昭算法

 秦九昭算法,也称“快速幂求多项式值算法”,是一种高效地计算一个多项式在某个点的取值的方法。它利用了快速幂算法的思想,在O(logn)的时间复杂度内计算出多项式在某个点的值。

对于一个n次多项式f(x),它可以表示为:

秦九昭算法利用了多项式的特殊性质,将上述公式转化为如下形式:

这个公式可以看作是从后往前逐项累加的过程,每次累加时都将上一项的结果乘以�x再加上当前项的系数。这个过程可以通过一个循环来实现,每次迭代都将当前项的系数与上一次迭代的结果相乘,再加上上一次迭代的结果,最终得到多项式在x0​处的值。

具体来说,可以用如下的代码实现:

double p = a[n];
for (int i = n - 1; i >= 0; --i) {p = a[i] + x * p;
}

公式:

 S =( {p_{1}}^{0}+{p_{1}}^{1}+{p_{1}}^{2}+...+{p_{1}}^{k})({p_{2}}^{0}+{p_{2}}^{1}+{p_{2}}^{2}+...+{p_{2}}^{k})...({p_{k}}^{0}+{p_{k}}^{1}+{p_{k}}^{2}+...+{p_{k}}^{k})

原理:把这个式子展开,会发现枚举了每种约数(指数不同,约数就不同),并将他们加起来,便是约数之和了。

程序怎么写呢,这里要用到秦九昭算法,由于我们约数求和公式里的ai = 1,因此程序写成

int res = 1;for (auto it : mp) {int p = it.first, k = it.second;int temp = 1;while (k--) {temp = (temp * p + 1) % mod;}res = res * temp % mod;}cout << res << endl;

完整代码

int mod = 1e9 + 7;
void solve() {int n; cin >> n;map<int, int> mp;while (n--) {int c; cin >> c;for (int i = 2; i <= c / i; i++) {while (c % i == 0) {c /= i;mp[i]++;}}if (c > 1) mp[c]++;}int res = 1;for (auto it : mp) {int p = it.first, k = it.second;int temp = 1;while (k--) {temp = (temp * p + 1) % mod;}res = res * temp % mod;}cout << res << endl;
}signed main()
{int t; t = 1;//cin >> t;while (t--) {solve();}return 0;
}

最大公约数,欧几里得算法

前置知识:

若 a%d==0,b%d==0,则 (ax+by) % d == 0

我们要求a,b的最大公约数。假设最大公约数是d

公式 gcd(a,b) == gcd(b,a%b),这是核心,这个公式为什么成立呢?往下看

原理:因为 a%b = a-(\frac{a}{b})*b,把\frac{a}{b}设为c,那么就是 a%b = a-c*b,

惊奇地发现这个式子满足(ax+by) % d == 0。

因此对于 gcd(b,a%b),d是b和a%b的约数,那么公式gcd(a,b) == gcd(b,a%b)就成立了。

当b <= 0时,此时的a就是最大公约数。

int gcd(int a, int b)
{return b > 0 ? gcd(b, a % b) : a;
}

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

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

相关文章

JavaGUI(但期末速成版)之事件监听和处理

点击返回标题->JavaGUI期末速成版-CSDN博客 前言 依旧先声明&#xff0c;本篇记录的JavaGUI编程都是十分精简的&#xff0c;内容只取常用的、套路的、应付期末考试的。 我先放两张ppt的原内容。。。 看完&#xff08;我觉得你可能都没看完&#xff09;&#xff0c;摊牌了&a…

赴日IT培训课程 程序员新思路!

先说好&#xff0c;跟国内相比&#xff0c;日本IT并不发达。日本IT是依托着日本传统强势的制造业和政府机关发展的&#xff0c;所以开发的大多数软件也是面向这些的&#xff0c;由于日本人的严谨态度&#xff0c;各种文档的编写层出不穷&#xff0c;不像国内程序员每天没日没夜…

android 新版studio gradle 里面没有offline 勾选项

studio 右边 gradle 上面有个图标可以点击切换

【深度学习】注意力机制(七)Agent Attention

本文介绍Agent Attention注意力机制&#xff0c;Transformer中的Attention模块可以提取全局语义信息&#xff0c;但是计算量太大&#xff0c;Agent Attention是一种计算非常有效的Attention模块。 论文&#xff1a;Agent Attention: On the Integration of Softmax and Linear…

前端手动部署与自动化部署

连接服务器 先购买服务器 安装vscode插件 连接服务器 连接成功 手动部署 安装nginx 启动nginx systemctl start nginx systemctl status nginx systemctl enable nginx启动 检查状态 开机就启动nginx 开始手动部署 配置nginx 成功

走过的2023:在挑战中领悟,在仿徨中成长

转眼间就到了2023年的最后一个月&#xff0c;回顾这短暂而又有意义的一年&#xff0c;可以用12个字总结&#xff1a;在挑战中领悟&#xff0c;在仿徨中成长。这篇文章我会从技术成长、职场生活、读书感悟和个人生活等几个方面&#xff0c;总结一下过去的这一年&#xff0c;梳理…

【玩转TableAgent数据智能分析】——个人体验分享

文章目录 前言上手体验优势不足 再次体验第三次体验第四次体验1、找到高价房源和低价房源的特点&#xff0c;看清民宿行业的整体布局2、了解各个地域的整体价格&#xff0c;优选潜力城市3、对比各个城市的评分&#xff0c;深入了解不同城市的民宿市场特点4、对比不同床型价格&a…

Java AQS 阻塞式锁和相关同步器工具的框架

8 J.U.C Java 并发工具包 AQS 原理 AQS&#xff1a;AbstractQueuedSynchronizer&#xff08;抽象队列同步器&#xff09;&#xff0c;阻塞式锁和相关同步器工具的框架 特点&#xff1a; 用 state 属性来表示资源的状态&#xff08;分独占模式和共享模式&#xff09;&#…

TCP/IP 传输层协议

传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCP&#xff08;Transmission Control Protocol&#xff09;和用户数据包协议UDP&#xff08;User Datagram Protocol&#xff09;。 TCP协议 TCP是一种面向连接的传输层协议&#…

esp32-s3解决使用蓝牙ble一键配网时,蓝牙ble内存使用的内部空间,空间不足时可采用外部PSRAM

idf.py menuconfig进入到esp32配置界面&#xff0c;配置NimBLE使用外部PSRAM内存即可

pip 离线安装:利用pypi网站进行模块 库的离线安装

离线安装是一种很好的方法&#xff0c;在网络不佳、库版本不明确、复杂库本地编译安装报错时&#xff0c;通过whl文件的下载安装&#xff0c;可以很高效的解决问题。 pypi的网站&#xff1a;https://pypi.org/ 这个网站包含各种你 pip install xxx 的库&#xff0c;离线安装可…

我做了一个在手机灵动岛锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率...的软件

我做了一个在手机灵动岛&锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率…的软件 Island Widgets 的作用&#xff1a; 提醒您 &#xff1a; 准时下班每天运动陪伴家人保持体重放下手机每日待办当前网速手机使用强度实时热搜现在天气… 初…

Python库学习(十三):爬虫框架Scrapy

微信搜索【猿码记】查看更多文章... 1.介绍 Scrapy是一个用于爬取网站数据的Python框架。它提供了一套强大而灵活的工具&#xff0c;使开发者能够轻松地创建和管理爬虫&#xff0c;从而从网站中提取所需的信息。框架要求Python的版本 3.8 Github Star:49.6k: https://github.c…

【Linux】Linux线程概念和线程控制

文章目录 一、Linux线程概念1.什么是线程2.线程的优缺点3.线程异常4.线程用途5.Linux进程VS线程 二、线程控制1.线程创建2.线程终止3.线程等待4.线程分离 一、Linux线程概念 1.什么是线程 线程是进程内的一个执行流。 我们知道&#xff0c;一个进程会有对应的PCB&#xff0c;…

GEE-Sentinel-2月度时间序列数据合成并导出

系列文章目录 第一章&#xff1a;时间序列数据合成 文章目录 系列文章目录前言时间序列数据合成总结 前言 利用每个月可获取植被指数数据取均值&#xff0c;合成月度平均植被指数&#xff0c;然后将12个月中的数据合成一个12波段的时间数据合成数据。 时间序列数据合成 代码…

ROS2 学习09--ros 中的通信接口的定义以及如何创建自定义msg、srv和action文件

在ROS系统中&#xff0c;无论话题还是服务&#xff0c;或者我们后续将要学习的动作&#xff0c;都会用到一个重要的概念——通信接口。 通信并不是一个人自言自语&#xff0c;而是两个甚至更多个人&#xff0c;你来我往的交流&#xff0c;交流的内容是什么呢&#xff1f;为了让…

数值分析(只为应付考试)

概述 研一时为应付高等工程数学考试整理的有关数值分析部分的内容&#xff0c;目的是为了应付考试。 误差 误差限与有效数字的联系 对于有 n n n 位有效数字的 x x x 的近似值 x ∗ x^* x∗, 其科学计数法表示形式 x ∗ a 1 . a 2 . . . a n 1 0 m ( a 1 ≠ 0 ) x^* …

Python开发GUI常用库PyQt6和PySide6介绍之二:设计师(Designer)

Python开发GUI常用库PyQt6和PySide6介绍之二&#xff1a;设计师&#xff08;Designer&#xff09; PySide6和PyQt6都有自己的设计师&#xff08;Designer&#xff09;&#xff0c;用于可视化地设计和布局GUI应用程序的界面。这些设计师提供了丰富的工具和功能&#xff0c;使开…

文件名生成excel清单,怎么操作?这里有简单办法

文件名生成excel清单&#xff0c;怎么操作&#xff1f;为了整理文件名称&#xff0c;有时候需要将所有的文件名称整理好并且生成excel清单&#xff0c;大家可能还不能理解是什么意思&#xff0c;其实就是将所有文件的名称整理到excel表格里&#xff0c;形成一个清单。这个操作很…

【ECharts】雷达图

let chart echarts.init(this.$refs.radar_chart); let option {title: {text: 关键过程指标,},grid: {left: 0,},legend: {data: [个人, 小组, 团队],bottom: 0,itemWidth: 6,itemHeight: 6,},radar: {// shape: circle,indicator: [{ name: 成交额, max: 30000 },{ name: 成…