Am si eu nevoie de ajutor la ultima problema( cu o metoda cat mai simplu de inteles,va rog) . Si cu explicatie, daca se poate
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
int main()
{
int n,k;
cin >> n >> k;
if ((2*n+k-k*k)%(2*k)!=0)
cout << "nu exista";
else
{
int num=(2*n+k-k*k)/(2*k);
for (int i=1; i<=k; ++i)
{
cout << num++ << " ";
}
}
}
Explicație:
e mai multă matematică... acei k termeni consecutivi formează o progresie aritmătică cu raţia 1 şi suma a k termeni este egală cu n. Conform formulei sumai a k termeni a progresiei arotmetice avem:
((a1+ak)*k)/2=n, de unde (a1+ak)*k=2*n, de unde a1+ak=(2*n)/k, dar ak=a1+(k-1)*1, ak=a1+k-1. Înlocuim şi avem a1+a1+k-1=(2*n)/k, de unde
a1=(2*n+k-k*k)/(2*k); Şi deci dacă restul de la împărţire este 0, atunci exista a1 şi deci şi k numere consecutive cu suma egală cu n, altfel nu există.