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 ;
        }
    }
}