Files
ExerciseHub/Luogu/P1147 连续自然数和.cpp
2025-08-13 21:38:49 +08:00

59 lines
968 B
C++

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int m;
cin>>m;
bool flag;
if(m%2==0) flag=true; //偶数需要偶数个连续加法
else flag=false; //奇数需要奇数个
int a[m]={-1};
int js=0;
for(int i=1;i<=m;i++) //题目优先分解质因数
{
if(m%i==0){
a[js]=i;
js++;
}
}
/*测试质因数 成功
for(int i=0;i<js;i++){
cout<<a[i]<<" ";
}
cout<<endl;
*/
int front=0,end=0;//首尾两项
if(flag==false)
{
for(int i=1;i<js-1;i++)
{
front=(m/a[i])-int(a[i]/2);
end=(m/a[i])+int(a[i]/2);
if(front>0 && end>0) cout<<front<<" "<<end<<endl;
}
}
double odd;
int mid=0;
if(flag==true)
{
for(int i=1;i<js-1;i++)
{
odd=m/(2*a[i]);
if(a[i]%2!=0){
front=m/a[i]-int(a[i]/2);
end=m/a[i]+int(a[i]/2);
if(front>0 && end>0) cout<<front<<" "<<end<<endl;
}
else
{
front=m/a[i]-int(a[i]/2);
end=m/a[i]+int(a[i]/2);
if(front>0 && end>0) cout<<front<<" "<<end<<endl;
}
}
}
return 0;
}