【C++数论 因数分解】829. 连续整数求和|1694

本文涉及知识点

数论:质数、最大公约数、菲蜀定理

LeetCode829. 连续整数求和

给定一个正整数 n,返回 连续正整数满足所有数字之和为 n 的组数 。

示例 1:

输入: n = 5

输出: 2

解释: 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。

示例 2:

输入: n = 9

输出: 3

解释: 9 = 4 + 5 = 2 + 3 + 4

示例 3:

输入: n = 15

输出: 4

解释: 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5

提示:

1 <= n <= 109

因数分解

如果n是两个连续整数之和,即:a+(a+1)= n,则 a = (n-1)/2。结果:a,a+1。

如果n是三个连续整数之和,则: n/3-1,n/3,n/3+1。

如果n是cnt个连续整数之和,cnt是偶数,令中间的两个数分别是:c,c+1。则cnt/2 × \times × (2 × \times ×c+1) = ctn * c +cnt/2 。如果n =a × \times ×b,a是奇数,b是偶数。则 c = a/2 cnt = b\\times 2 。如: 3 2。如:3 2。如:3\\times2,0,1,2,3

如果cnt时奇数,最中间的是c = n/cnt。

for a = 1 To aa<=n
如果存a
b=n,则通过以上的方式计算cnt,放到哈希激活setCnt中除重。如果a时奇数,setCnt.insert(a) setCnt.insert(n/a*2)。b是奇数类似。

setCnt.size

代码

核心代码

cpp 复制代码
class Solution {
		public:
			int consecutiveNumbersSum(int n) {
				unordered_set<int> setCnt;
				auto Add = [&](int m) {
					int iMin = 0;
					if (m & 1) {
						iMin = n / m - m / 2 ;
					}
					else {
						const int total = n / (m / 2);
						iMin = (total - 1) / 2- (m/2-1);
					}
					if (iMin <= 0) { return; }
					setCnt.emplace(m);
				};
				for (int i = 1; i * i <= n; i++) {
					if (0 != n % i) { continue; }
					const int j = n / i;
					if (i & 1) {
						Add(i);
						Add(j * 2);
					}
					if (j & 1) {
						Add(j);
						Add(i * 2);
					}
				}
				return setCnt.size();
			}
		};

​​​​​​​

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17

或者 操作系统:win10 开发环境: VS2022 C++17

如无特殊说明,本算法用**C++**实现。

相关推荐
hie9889422 分钟前
MATLAB锂离子电池伪二维(P2D)模型实现
人工智能·算法·matlab
Jay_51523 分钟前
C++多态与虚函数详解:从入门到精通
开发语言·c++
杰克尼32 分钟前
BM5 合并k个已排序的链表
数据结构·算法·链表
.30-06Springfield1 小时前
决策树(Decision tree)算法详解(ID3、C4.5、CART)
人工智能·python·算法·决策树·机器学习
我不是哆啦A梦1 小时前
破解风电运维“百模大战”困局,机械版ChatGPT诞生?
运维·人工智能·python·算法·chatgpt
xiaolang_8616_wjl1 小时前
c++文字游戏_闯关打怪
开发语言·数据结构·c++·算法·c++20
small_wh1te_coder1 小时前
硬件嵌入式学习路线大总结(一):C语言与linux。内功心法——从入门到精通,彻底打通你的任督二脉!
linux·c语言·汇编·嵌入式硬件·算法·c
FrostedLotus·霜莲2 小时前
C++主流编辑器特点比较
开发语言·c++·编辑器
挺菜的2 小时前
【算法刷题记录(简单题)002】字符串字符匹配(java代码实现)
java·开发语言·算法
凌肖战5 小时前
力扣网编程55题:跳跃游戏之逆向思维
算法·leetcode