51Nod_1138 连续整数的和
http://www.51nod.com/Challenge/Problem.html#!#problemId=1138
题目
给出一个正整数N,将N写为若干个连续数字和的形式(长度 >= 2)。例如N = 15,可以写为1 + 2 + 3 + 4 + 5,也可以写为4 + 5 + 6,或7 + 8。如果不能写为若干个连续整数的和,则输出No Solution。
输入
输入1个数N(3 <= N <= 10^9)。
输出
输出连续整数中的第1个数,如果有多个按照递增序排列,如果不能分解为若干个连续整数的和,则输出No Solution。
样例输入
15
样例输出
1
4
7
分析
由等差数列求和公式
令d=1可得
a1=(Sn-n(n-1)/2)n
可枚举项数n,计算起始数a1,如果a1是整数则可以,否则不行
C++程序
#include<iostream>
#include<math.h>
using namespace std;
typedef long long ll;
int main()
{
ll n;
bool flag=false;
cin>>n;
int j=(int)sqrt(2.0*n);
for(int i=j;i>=2;i--)
{
if((n-i*(i-1)/2)%i==0){
flag=true;
cout<<(n-i*(i-1)/2)/i<<endl;
}
}
if(!flag)
cout<<"No Solution"<<endl;
return 0;
}