AC代码
using namespace std;
#define int long long
#define eps 1e-15
signed main(){
int s; scanf("%lld", &s);
for(int i = sqrt(2*s) ; i >= 1 ;i--){
if((2 * s) % i == 0 && (2*s -i*i +i) > 0 && (2*s -i*i +i) % (2 * i ) == 0 ) {
cout << (2*s -i*i +i) / (2 * i )<< " " << (2*s -i*i +i) / (2 * i ) + i - 1 << endl ;
return 0 ;
}
}
}
下面的代码没有过 原因未知
using namespace std;
#define int long long
#define eps 1e-15
int a[2000000];
int cnt= 0;
signed main(){
int s; scanf("%lld", &s);
for(int i = 1; i <= sqrt(2*s) ;i++){
if((2 * s) % i == 0 ) {
a[++cnt] = i;
}
}
for(long long i = cnt ; i >= 1 ; i--){
double X = (double)s / (double)i - (double) i / 2.0 + 0.5 ;
if ( X > 0 && (X - (long long)X) < eps ) {
long long Y = (X + i - 1);
cout << (long long) X << " " << Y << endl ;
return 0 ;
}
}
}