题目
给定一个正整数 n,如果能够分解为 m(m > 1)个连续正整数之和,请输出所有分解中,m最小的分解。
如果给定整数无法分解为连续正整数,则输出字符串"N"。
输入描述
输入数据为一整数,范围为 (1, 2^30],比如23
输出描述
23=11+12
解题思路
当输入为1时,无法分解,直接输出"N";对于奇数n,直接分解为n/2和n/2+1;对于偶数n,找到其最大奇因数x,然后判断连续正整数数列的长度是奇数还是偶数:如果长度是偶数,则最短长度为n/x*2,起始数为x/2-(长度/2-1);如果长度是奇数,则调用函数 findMinOddSequenceLength() 求出最短奇数长度,然后计算起始数。根据得到的最短长度和起始数构造连续正整数数列的表达式并输出。findMinOddSequenceLength() 的作用是找到给定正整数n和其最大奇因数x的最短奇数长度。
代码
#include <iostream>
using n