/**/ /*对一个给定的自然数M,求出所有的连续的自然数段(连续个数大于1),这些连续的自然数段中的全部数之和为M。例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解。 输入格式 Input Format 包含一个整数的单独一行给出M的值(10 <= M <= 2,000,000) 输出格式 Output Format 每行两个自然数,给出一个满足条件的连续自然数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定的输入数据,保证至少有一个解。 */ #include < stdio.h > int main( void ) ... { long i,j,k,m ; scanf("%ld",&m) ; k = m/2+1 ; for(i=1 ;i <=k ; i++) for(j=i+1; j<=m ; j++) if( (j-i+1)*(i+j)/2 >=m ) ...{ if ( (j-i+1)*(i+j)/2 == m ) ...{ printf("%ld %ld ",i,j); } break ; } system("pause"); return 0 ;} /**/ / #include < stdio.h > int main() ... {register long i,n,t,f,g;scanf("%ld",&n);for(i=n;i>1;i--)...{if(((f=n<<1))%i==0 && ((t=f/i+1-i))%2==0 && (g=t>>1)>0)printf("%ld %ld ",g,g+i-1);} return 0;}