Răspuns :
O suma de numere naturale consecutive este defapt suma termenilor unei progresii aritmetice cu ratia 1. Ne vom folosi de formula pentru calculul acestei sume:
[tex]S= \frac{(a_1+a_n)n}{2} [/tex] , unde a1 si an sunt primul, respectiv ultimul termen al progresiei, iar n este numarul de elemente
In cazul nostru S este defapt a(suma finala), iar n este b (numarul de termeni)
Inlocuim:
[tex]a = \frac{(a_1+a_n)b}{2} [/tex]
Am stabilit la inceput ca ratia este r = 1 , deci il putem scrie pe an in functie de a1 conform formulei termenului general al unei progresii aritmetice:
[tex]a_n=a_1+(n-1)r=a_1+n-1=a_1+b-1[/tex]
Inlocuim:
[tex]a= \frac{(2a_1+b-1)b}{2}\\ 2a = 2ba_1+b^2-b\\ 2ba_1=2a+b-b^2\\\\ a_1= \frac{2a+b-b^2}{2b} [/tex]
a1 trebuie sa fie numar natural ==> si acea fractie trebuie sa fie numar natural ==> Problema se rezuma la faptul ca 2a + b - b² trebuie sa fie divizibil cu 2b
Codul:
#include <iostream>
using namespace std;
int main()
{
int a, b, aux;
cin>>a>>b;
aux = 2 * a + b - b * b; // Numaratorul fractiei
if(aux > 0 && aux % (2 * b) == 0) //In primul rand trebuie sa fie pozitiv
cout<<"DA";
else
cout<<"NU";
}
//END
Daca nu ai rabdare sa parcurgi toate explicatiile, iti las aici si metoda prin brute-force:
#include <iostream>
using namespace std;
int main()
{
int a, b, s = 0, a1 = 1;
cin>>a>>b;
while(s <= a)
{
s = (2 * a1 + b - 1) * b / 2;
a1++;
}
if(s == a)
cout<<"DA";
else
cout<<"NU";
}
[tex]S= \frac{(a_1+a_n)n}{2} [/tex] , unde a1 si an sunt primul, respectiv ultimul termen al progresiei, iar n este numarul de elemente
In cazul nostru S este defapt a(suma finala), iar n este b (numarul de termeni)
Inlocuim:
[tex]a = \frac{(a_1+a_n)b}{2} [/tex]
Am stabilit la inceput ca ratia este r = 1 , deci il putem scrie pe an in functie de a1 conform formulei termenului general al unei progresii aritmetice:
[tex]a_n=a_1+(n-1)r=a_1+n-1=a_1+b-1[/tex]
Inlocuim:
[tex]a= \frac{(2a_1+b-1)b}{2}\\ 2a = 2ba_1+b^2-b\\ 2ba_1=2a+b-b^2\\\\ a_1= \frac{2a+b-b^2}{2b} [/tex]
a1 trebuie sa fie numar natural ==> si acea fractie trebuie sa fie numar natural ==> Problema se rezuma la faptul ca 2a + b - b² trebuie sa fie divizibil cu 2b
Codul:
#include <iostream>
using namespace std;
int main()
{
int a, b, aux;
cin>>a>>b;
aux = 2 * a + b - b * b; // Numaratorul fractiei
if(aux > 0 && aux % (2 * b) == 0) //In primul rand trebuie sa fie pozitiv
cout<<"DA";
else
cout<<"NU";
}
//END
Daca nu ai rabdare sa parcurgi toate explicatiile, iti las aici si metoda prin brute-force:
#include <iostream>
using namespace std;
int main()
{
int a, b, s = 0, a1 = 1;
cin>>a>>b;
while(s <= a)
{
s = (2 * a1 + b - 1) * b / 2;
a1++;
}
if(s == a)
cout<<"DA";
else
cout<<"NU";
}
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile și inspiraționale. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, suntem aici pentru a vă ajuta. Ne face plăcere să vă revedem și vă invităm să adăugați site-ul nostru la favorite pentru acces rapid!