标签:
input | output |
---|---|
14 |
2 4 |
解析:由N = A + (A + 1) + … + (A + P ? 1)可计算出P的最大值为sqrt(2*n),直接枚举即可。
AC代码:
#include <bits/stdc++.h> using namespace std; int n; int ansa, ansp; int f(int a, int b){ return ((b - a + 1) % 2) ? ((b - a) / 2 * (a + b - 1) + b) : ((b - a + 1) / 2 * (a + b)); } int main(){ int n; while(scanf("%d", &n) != EOF){ int p = sqrt((double)(2 * n)); //P的最大值 while(p){ int a = (2*n / p - (p - 1))>>1; //通过P,计算A if(a && f(a, a + p - 1) == n){ ansa = a; ansp = p; break; } p --; } printf("%d %d\n", ansa, ansp); } return 0; }
URAL 1120. Sum of Sequential Numbers (数学)
标签:
原文地址:http://blog.csdn.net/u013446688/article/details/46582295