Cerința
Se dă un număr natural n
. Să se determine dacă numărul se poate scrie ca sumă de două numere triunghiulare.
Cerința
Se dă un număr natural n
. Să se determine dacă numărul se poate scrie ca sumă de două numere triunghiulare.
Dacă este posibil se vor afișa două numere triunghiulare a căror sumă este egală cu n
, în orice ordine, respectiv mesajul NU
în caz contrar.
Un număr triunghiular este numărul de puncte dintr-un triunghi echilateral umplut uniform cu puncte. De exemplu, 1
, 3
, 6
, 10
, 15
sunt numere triunghiulare.
Date de intrare
Programul citește de la tastatură numărul n
.
Date de ieșire
Programul va afișa pe ecran, în orice ordine, două numere triunghiulare care însumate dau numărul n
, separate printr-un spațiu, sau mesajul NU
dacă numărul nu poate fi scris ca suma de două numere triunghiulare.
Restricții și precizări
n ≤ 10
12
;- numerele triunghiulare determinate pot fi identice.
Exemplul 1:
Intrare
24
Ieșire
3 21
Exemplul 2:
Intrare
15
Ieșire
NU
#include <bits/stdc++.h> using namespace std; long long int n, rez1, rez2; bool ok = false; int main(){ cin >> n; for(long long int i = 1; 1LL * i * (i + 1) / 2 < n; ++i){ long long x = 1LL * i * (i + 1) / 2; long long y = n - x; y *= 2; long long s = sqrt(y); if(1LL * s * (s + 1) == y) ok = true, rez1 = x, rez2 = y/2; } if(ok) cout << rez1 << ' ' << rez2; else cout << "NU"; return 0; }