本题是一道比较简单的枚举题。
假设连续正整数的首项是a,项数是m。根据等差数列求和公式有:
(a + a + m - 1) * m / 2 = n
也就是
(2a+m-1) * m = 2n
所以m一定是2n的约数。
于是我们可以枚举2n的每一个约数(由于约数都是成对出现的,所以只需要枚举到sqrt(2n)即可) ,然后判断对应的a是否存在正整数解。
最后从所有解中找出m最大值即可。
本题是一道比较简单的枚举题。
假设连续正整数的首项是a,项数是m。根据等差数列求和公式有:
(a + a + m - 1) * m / 2 = n
也就是
(2a+m-1) * m = 2n
所以m一定是2n的约数。
于是我们可以枚举2n的每一个约数(由于约数都是成对出现的,所以只需要枚举到sqrt(2n)即可) ,然后判断对应的a是否存在正整数解。
最后从所有解中找出m最大值即可。
include using namespace std;
void deal() { int n; cin>>n; int sum=0; int ans; for (int i=sqrt(2*n);i>=1;i--) { if (2*n%i==0) { //cout<>t; for (int i=1;i<=t;i++) { deal(); } return 0; }