Cerinţă
Se dau 2 numere naturale, a şi b. Să se determine dacă a se poate scrie că suma de b numere naturale consecutive.
Date de intrare
Programul citeşte de la tastatură cele 2 numere a şi b.
Date de ieşire
Programul va afişa pe ecran numărul mesajul DA dacă a se poate scrie că suma de b numere naturale, iar NU în caz contrar.
Restricţii şi precizări
1 ≤ a ≤ 100.000.000
1 ≤ b ≤ 25.000
dau 20 de pct
va rooooooog
In C++
Răspunsuri la întrebare
Răspuns de
1
int a,b;
cin >> a >> b;
if(a%b == 0){
cout << "Da";
}else{cout <<"Nu";}
/*Ca sa se poata scrie trebuie sa fie divizibile deoarece inmultirea reprezinta adunari repetitive*/
cin >> a >> b;
if(a%b == 0){
cout << "Da";
}else{cout <<"Nu";}
/*Ca sa se poata scrie trebuie sa fie divizibile deoarece inmultirea reprezinta adunari repetitive*/
Seckar:
Nu cred ca ai inteles cerinta. a trebuie sa se poata scrie ca suma de b numere consecutive intre ele.
Răspuns de
2
Bun pai, folosim putin mate:
ca un nr a sa se scrie ca suma de b nr naturale consecutive inseamna ca:
Exista un k astfel incat:
(k+1) + (k+2) + (k+3) + ... + (k+b) = a
Acum, observam ca avem exact b numere consecutive si toate sunt mai mari decat k, asa ca putem desface parantezele si scoatem cei b de k in fata:
b*k + (1+2+3+...+b) = a
Acum, stim ca:
1+2+3+...+b =
Deci avem:
[tex]b*k+\frac{b(b+1)}{2} = a [/tex]
Adica:
Adica:
Ala ar fi k-ul tau, dar ai o singura problema, e posibil sa nu iti dea nr intreg. Daca nu iti da k nr intreg atunci evident nu poate a sa fie scris ca suma de nr naturale consecutive.
Asa ca sfatul meu este sa iti declari si a, si b, si k ca si nr reale, adica float, nu int, si la sfarsit, dupa ce ai aflat k, sa verifici daca k este nr intreg sau nu. Si asta o faci asa:
if (k == (int)k)
Treaba aia cu int se numeste cast si se face la facultate tehnic, practic e ceva extrem de simplu, ii "soptesti" programului in c++ ca vrei sa se "prefaca" ca k e int, nu float, pentru calculul ala, DOAR pt calculul ala.
ca un nr a sa se scrie ca suma de b nr naturale consecutive inseamna ca:
Exista un k astfel incat:
(k+1) + (k+2) + (k+3) + ... + (k+b) = a
Acum, observam ca avem exact b numere consecutive si toate sunt mai mari decat k, asa ca putem desface parantezele si scoatem cei b de k in fata:
b*k + (1+2+3+...+b) = a
Acum, stim ca:
1+2+3+...+b =
Deci avem:
[tex]b*k+\frac{b(b+1)}{2} = a [/tex]
Adica:
Adica:
Ala ar fi k-ul tau, dar ai o singura problema, e posibil sa nu iti dea nr intreg. Daca nu iti da k nr intreg atunci evident nu poate a sa fie scris ca suma de nr naturale consecutive.
Asa ca sfatul meu este sa iti declari si a, si b, si k ca si nr reale, adica float, nu int, si la sfarsit, dupa ce ai aflat k, sa verifici daca k este nr intreg sau nu. Si asta o faci asa:
if (k == (int)k)
Treaba aia cu int se numeste cast si se face la facultate tehnic, practic e ceva extrem de simplu, ii "soptesti" programului in c++ ca vrei sa se "prefaca" ca k e int, nu float, pentru calculul ala, DOAR pt calculul ala.
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Studii sociale,
9 ani în urmă
Matematică,
9 ani în urmă