经典算法 最多约数问题

ops/2025/3/1 6:39:11/

最多约数问题

正整数x的约数是能整除x的正整数。正整数x 的约数个数记为div(x)。例如,1,2,5,10 都是正整数10 的约数,则div(10)=4。设a 和b 是2 个正整数,a≤b,找出a和b之间约数个数最多的数x的约数个数.

输入

输入只有一行为两个整数a, b

输出

输出只有一行为a和b之间约数个数最多的数x的因数个数.

示例输入

1 36

示例输出

9

示例输入

1000 800000

示例输出

240

o(n*n^1/2)n的根号n 质因数分解算法

#include<bits/stdc++.h>using namespace std;int a, b;int div(int x) {unordered_map<int, int> maps;while (x % 2 == 0) {maps[2]++;x /= 2;}for (int i = 3; i * i <= x; i += 2) {while (x % i == 0) {maps[i]++;x /= i;}}if (x > 2) maps[x]++;int sum = 1;for (auto p : maps) {sum *= (p.second + 1);}return sum;
}int main () {int a, b, ans = 0;cin >> a >> b;for (int i = a; i <= b; i++) {ans = max(ans, div(i));}cout <<ans << endl;
}//by wqs

一个合数的约数个数等于它每个质因数的个数+1再相乘。

例如10分解为10=2^1 * 5^1;

则10的约数可以选择0个2,0个5对应1;1个2,0个5,对应2;0个2,1个5对应5;1个2,1个5对应10;

事实上10的约数个数=所有(质因数次数 + 1)的乘

10的约数就是4

例如12=2^2 * 3^1;

可以选择0个2,1个2,2个2,0个3,1个3

一共有(2 + 1)*(1 + 1)种选择

12的约数就是6

质因数分解

时间复杂度o(n^1/2)也就是根号n

unordered_map<int, int> maps;
while (x % 2 == 0) {maps[2]++;x /= 2;
}
for (int i = 3; i * i <= x; i += 2) {while (x % i == 0) {maps[i]++;x /= i;}
}
if (x > 2) maps[x]++;
求约数
int sum = 1;
for (auto p : maps) {sum *= (p.second + 1);
}
return sum;
统计最大约数
for (int i = a; i <= b; i++) {ans = max(ans, div(i));
}

0(nln(n)) 埃拉托斯特尼筛法,最佳算法

#include<bits/stdc++.h>using namespace std;int a, b, ans = 0;int main() {cin >> a >> b;vector<int> div_count(b + 1, 0);for (int i = 1; i <= b; i++) {for (int j = i; j <= b; j += i) {div_count[j]++;}}for (int i = a; i <= b; i++) {ans = max(ans, div_count[i]);}cout << ans << endl;return 0;
}//by wqs

很好理解

i=1时把能整除1的数div++,例如1,2,3,4,5,6,7,8,…

i=2时把能整除2的数div++,例如2,4,6,8,10,12,…

i=3时把能整除3的数div++,例如3,6,9,12,…

i=101时把能整除101的数div++,例如101,202,303,404…

for (int i = 1; i <= b; i++) {for (int j = i; j <= b; j += i) {div_count[j]++;}
}

最后统计既可

for (int i = a; i <= b; i++) {ans = max(ans, div_count[i]);
}

http://www.ppmy.cn/ops/162160.html

相关文章

ShenNiusModularity项目源码学习(15:ShenNius.Admin.API项目分析)

ShenNius.Admin.Mvc项目是MVC模式的入口&#xff0c;ShenNius.Admin.Hosting项目是前后端分离模式的后台服务入口&#xff0c;这两个项目都依赖ShenNius.Admin.API项目&#xff0c;前者使用ShenniusAdminApiModule类注册服务及配置管道&#xff0c;而后者的webapi实现都在ShenN…

ubuntu22.04安装docker engine

在Ubuntu 22.04上安装Docker Engine可以通过以下步骤完成&#xff1a; 更新系统包索引&#xff1a; sudo apt update安装必要的依赖包&#xff1a; 这些包允许apt通过HTTPS使用仓库。 sudo apt install -y apt-transport-https ca-certificates curl software-properties-commo…

基于反激电路的电池充放电均衡控制

基于反激电路的电池充放电均衡控制是一种高效的能量转移型主动均衡方法&#xff0c;适用于锂离子电池组等串联电池组的管理。以下从原理、拓扑结构、控制策略和设计要点进行详细分析&#xff1a; 一、基本原理 反激电路&#xff08;Flyback Converter&#xff09;是一种隔离型…

【Kubernetes】API server 限流 之 maxinflight.go

这个文件实现了一个基于信号量(Channel)的简单限流器。 基础知识 总共有四种channel 带缓冲的channel nonMutatingChan、mutatingChan 都是带缓冲的channel &#xff0c;这类channel 的特点是&#xff1a; 这允许最多 mutatingLimit /nonMutatingLimit 个请求同时获取令牌并执…

GPT-4.5 怎么样?如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作

GPT-4.5 怎么样&#xff1f;如何升级使用ChatGPTPlus/Pro? GPT-4.5设计目标是成为一款非推理型模型的巅峰之作 今天我们来说说上午发布的GPT-4.5&#xff0c;接下来我们说说GPT4.5到底如何&#xff0c;有哪些功能&#xff1f;有哪些性能提升&#xff1f;怎么快速使用到GPT-4.…

探索 Hutool - JSON:高效的 JSON 处理利器

各位开发者们&#xff0c;咱今天来好好聊聊在 Java 开发里特别实用的一个工具——Hutool - JSON。在现代的软件开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已经成为了数据交换的标准格式之一&#xff0c;无论是前后端交互&#xff0c;还是与第三…

SpringCloud之Eureka、Ribbon、OpenFeign

目录1. SpringCloud Eureka&#xff08;服务注册与发现组件&#xff09;2. SpringCloud Ribbon&#xff08;负载均衡与服务调用组件&#xff09;3. SpringCloud OpenFeign&#xff08;负载均衡与服务调用组件&#xff09;SpringCloud&#xff1a;用于开发高度可扩展、高性能的分…

浅谈流媒体协议以及视频编解码

流媒体协议介绍 流媒体协议用于传输视频、音频等多媒体数据&#xff0c;确保数据流畅地传输到用户设备。常见的流媒体协议包括 RTMP、HLS、DASH、WebRTC 等&#xff0c;每种协议具有不同的特点和适用场景。 1. RTMP (Real-Time Messaging Protocol) 定义&#xff1a;由 Adob…