【数论】约数

试除法求约数

时间复杂度 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.hqwc.cn/news/292298.html

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

相关文章

数据库客户案例:每个物种都需要一个数据库!

1、GERDH——花卉多组学数据库 项目名称&#xff1a;GERDH&#xff1a;花卉多组学数据库 链接地址&#xff1a;https://dphdatabase.com 项目描述&#xff1a;GERDH包含了来自150多种园艺花卉植物种质的 12961个观赏植物。将不同花卉植物转录组学、表观组学等数据进行比较&am…

水利水库大坝安全监测参数详解

变形监测 变形监测是指对工程结构或地质环境中的变形进行实时或定期的测量与监测的过程。变形监测的目的是为了及时了解结构或环境的变形情况&#xff0c;评估其稳定性和安全性&#xff0c;并采取相应的措施来预防灾害和保护人民生命财产安全。 变形监测主要包括的内容有&#…

Jenkins 构建触发器指南

目录 触发远程构建 (例如&#xff0c;使用脚本) 描述 配置步骤 安全令牌 在其他项目构建完成后触发构建 描述 配置步骤 定时触发构建 描述 配置步骤 GitHub钩子触发GITScm轮询 描述 配置步骤 Poll SCM - 轮询版本控制系统 描述 触发远程构建 (例如&#xff0c;使…

Nature Commun.:物理所揭示原子分辨下的铁电涡旋畴的原位力学转变过程

通过复杂的晶格-电荷相互作用形成的铁电涡旋畴在纳米电子器件研发中具有巨大的应用潜力。实际应用中&#xff0c;如何在外界激励下操纵这类结构的拓扑状态是至关重要的。中国科学院物理研究所/北京凝聚态物理国家研究中心表面物理国家重点实验室与北京大学、湘潭大学和美国宾夕…

surface pro 如何调用和显示软键盘/触摸键盘

长按任务栏-勾选☑显示触摸键盘 右下角就会出现软键盘按钮 如果点选输入栏自动弹出或调用软键盘或触控键盘&#xff0c;按如下设定 设置-输入-不处于平板电脑模式且未连接键盘时显示触摸键盘 &#xff08;开关打开即可&#xff09;

【easy-ES使用】1.基础操作:增删改查、批量操作、分词查询、聚合处理。

easy-es、elasticsearch、分词器 与springboot 结合的代码我这里就不放了&#xff0c;我这里直接是使用代码。 基础准备&#xff1a; 创建实体类&#xff1a; Data // 索引名 IndexName("test_jc") public class TestJcES {// id注解IndexId(type IdType.CUSTOMI…

免费!Apipost IDEA插件

IDEA插件市场中的API调试插件不是收费&#xff08;Fast Request &#xff09;就是不好用&#xff08;apidoc、apidocx等等&#xff09;今天给大家介绍一款国产的API调试插件&#xff1a;Apipost-Helper&#xff0c;完全免费且好看好用&#xff01; 这款插件由Apipost团队开发的…

docker安装ES:7.8和Kibana:7.8

本文适用于centos7,快速入手练习es语法 前置&#xff1a;安装docker教程docker、docker-component安装-CSDN博客 1.安装es 9200为启动端口&#xff0c;9300为集群端口 docker pull elasticsearch:7.8.0mkdir -p /mydata/elasticsearch/pluginsmkdir -p /mydata/elasticsear…

IDEA 黑色主题很难看到鼠标

“控制面板”—搜索“鼠标”关键字—选择“更改鼠标设置” 参考&#xff1a; IDEA 黑色主题很难看到鼠标

编码器脉冲信号测量2路DI高速计数器PNP/NPN转RS-485数据采集模块 YL150-485 标准Modbus RTU协议

特点&#xff1a; ● 编码器解码转换成标准Modbus RTU协议 ● 可用作编码器计数器或者转速测量 ● 支持编码器计数&#xff0c;可识别正反转 ● 也可以设置作为2路独立DI高速计数器 ● 计数值支持断电自动保存 ● DI输入支持PNP和NPN输入 ● 继电器和机械开关输入时可以…

​​​​​​​配置MUX VLAN示例(接入层设备)

组网需求 在企业网络中&#xff0c;企业所有员工都可以访问企业的服务器。但对于企业来说&#xff0c;希望企业内部部分员工之间可以互相交流&#xff0c;而部分员工之间是隔离的&#xff0c;不能够互相访问。 如图1所示&#xff0c;为了解决上述问题&#xff0c;可在连接终端…

苏州耕耘无忧物联网:降本增效,设备维护管理数字化转型的引领者

随着科技的快速发展和工业4.0的推动&#xff0c;设备维护管理已经从传统的被动式、经验式维护&#xff0c;转向了更加积极主动、数据驱动的维护模式。在这个过程中&#xff0c;苏州耕耘无忧物联科技有限公司以其深厚的技术积累和丰富的管理经验&#xff0c;引领着设备维护管理数…