1120. Sum of Sequential Numbers
Time limit: 1.0 second
Memory limit: 64 MB
Memory limit: 64 MB
There is no involute formulation concerning factitiously activity of SKB Kontur in this problem. Moreover, there is no formulation at all.
Input
There is the only number
N, 1 ≤
N ≤ 10
9.
Output
Your program is to output two positive integers
A and
Pseparated with a space such that:
- N = A + (A + 1) + … + (A + P − 1).
- You are to choose a pair with the maximal possible value of P.
Sample
input | output |
---|---|
14 | 2 4 |
Problem Source: USU Open Collegiate Programming Contest October'2001 Junior Session
解析:由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;
}