连续自然数和

洛谷普及-,不过题还是挺好的啊

就是我们由等差数列求和公式或者是高斯那个方法,得到(r+l)*(r-l+1)=2*m

这样的话我们分别设k1=r+l,k2=r-l+1;

我们把问题转化成了求两个数k1,k2它们的乘积是m*2;

这时候我们联立这两个方程组发现r=(k1+k2-1)/2; l=(k1-k2+1)/2

这两个方程有解,当且仅当k1和k2一个奇数一个偶数;

我们枚举即可,同时就是r不能等于l,这个是由于m不属于一个自然数序列

#include
#include
#include
#include 
using namespace std;
int m;
struct hyq{
	int l,r;
}a[2000005];
int main(){
	cin>>m;
	m*=2;
	for(int i=sqrt(m);i>=2;i--){
		if(m%i==0){
			if(i%2!=(m/i)%2){
				int l=(i+m/i-1)/2,r=(m/i-i+1)/2;
				if(l!=r){
					cout<

 

你可能感兴趣的:(数学,连续自然数和)