洛谷 1147_连续自然数和_dp

lzusa 发布于 2019-05-08 987 次阅读


题目描述

对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M。


思路

通过等差数列公式变式一下,枚举然后判断一下就可以了
O(n/2)


#include 
int main()
{
    int n;
    scanf("%d",&n);
    n=n*2;
    for (int i=n/4;i>1;i--)
    {
        if (n%i==0)
        {
            int t=n/i;
            if (t-i+1>0&&(t-i+1)/2+(t+i-1)/2==t)
                printf("%d %d\n",(t-i+1)/2,(t+i-1)/2);
        }
    }
}
]]>