fbpx

Problema #2021 – SumaGauss2 – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Ana a calculat suma numerelor naturale mai mici sau egale cu n, iar Andreea suma numerelor naturale mai mici sau egale cu m. Doamna de mate a calculat apoi diferenţa celor două sume şi a obţinut rezultatul S.

Pentru o valoare S dată, aflaţi toate perechile (n,m), cu n>m, scriindu-le în ordine descrescătoare după n astfel încât doamna de mate să obţină rezultatul S.

Date de intrare

Fișierul de intrare sumagauss2.in conține pe prima linie numărul S.

Date de ieșire

Fișierul de ieșire sumagauss2.out va conține pe linii diferite perechile (n,m), cu n>m, în ordine descrescătoare după n.

Restricții și precizări

  • 1 ≤ S ≤ 2.000.000.000

Exemplu

sumagauss2.in

10

sumagauss2.out

10 9
4 0

Explicație

Avem ( 0+1+2+...+10 )-( 0+1+2+...+9 )=10 , respectiv (0+1+2+3+4)-0=10.

#include <bits/stdc++.h>
using namespace std;
ifstream fin("sumagauss2.in");
ofstream fout("sumagauss2.out");
int main()
{
    long long s , sq , aux , n , m , d , s2;
    fin >> s;
    s2 = s * 2;
    for(d = 1; d * d <= s2; d++)
    {
        if(s2 % d == 0)
        {
            aux = d + s2 / d - 1;
            if(aux % 2 == 0)
            {
                n = aux / 2;
                m = n - d;
                fout << n <<" " << m <<endl;;
            }
        }
    }
    return 0;
}
Comentarii

S-ar putea sa iti placa