Šta nam omogućavaju izračunati polinomi ? Ako je bilo koji polinom, onda možemo izračunati . Zaista, za ma koje brojeve važi .
U petlji
Code:
for (j=1; j<=s0; j=j+1)
{
s = s+n*j+(i+j)*s0*s0+(i+j)*s0*((i+j)*s0+1)/2;
}
for (j=1; j<=s0; j=j+1)
{
s = s+n*j+(i+j)*s0*s0+(i+j)*s0*((i+j)*s0+1)/2;
}
izraz (s0) koji predstavlja granicu indeksa se ne menja. Pošto je n*j+(i+j)*s0*s0+(i+j)*s0*((i+j)*s0+1)/2=(s0*s0/2)*j*j+(n+s0*s0+i*s0+s0/2)*j+(i*s0*s0+(i*i*s0*s0+i*s0)/2), prethodna petlja je ekvivalentna petlji
Code:
for (j=1; j<=s0; j=j+1)
{
s = s+(s0*s0/2)*j*j+(n+s0*s0+i*s0+s0/2)*j+(i*s0*s0+(i*i*s0*s0+i*s0)/2);
}
for (j=1; j<=s0; j=j+1)
{
s = s+(s0*s0/2)*j*j+(n+s0*s0+i*s0+s0/2)*j+(i*s0*s0+(i*i*s0*s0+i*s0)/2);
}
Posto se u petlji vrednosti promenljivih s0,n,i ne menjaju, ovaj kod će biti ekvivalentan naredbi
Code:
s = s+(s0*s0/2)*(2*s0+1)*(s0+1)*s0/6+(n+s0*s0+i*s0+s0/2)*(s0+1)*s0/2+(i*s0*s0+(i*i*s0*s0+i*s0)/2)*s0;
s = s+(s0*s0/2)*(2*s0+1)*(s0+1)*s0/6+(n+s0*s0+i*s0+s0/2)*(s0+1)*s0/2+(i*s0*s0+(i*i*s0*s0+i*s0)/2)*s0;
Dakle, program je ekvivalentan sa
Code:
#include <iostream>
using namespace std;
int main()
{
int i,j,k,n,s,s0;
cout << "Unesi prirodan broj " << flush;
cin >> n;
s = 0;
s0 = 0;
for (i=1; i<=n ; i=i+1)
{
s = s + n;
s0 = s0 + n;
s = s+(s0*s0/2)*(2*s0+1)*(s0+1)*s0/6+(n+s0*s0+i*s0+s0/2)*(s0+1)*s0/2+(i*s0*s0+(i*i*s0*s0+i*s0)/2)*s0;
}
cout << "Rezultat je " << s << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int i,j,k,n,s,s0;
cout << "Unesi prirodan broj " << flush;
cin >> n;
s = 0;
s0 = 0;
for (i=1; i<=n ; i=i+1)
{
s = s + n;
s0 = s0 + n;
s = s+(s0*s0/2)*(2*s0+1)*(s0+1)*s0/6+(n+s0*s0+i*s0+s0/2)*(s0+1)*s0/2+(i*s0*s0+(i*i*s0*s0+i*s0)/2)*s0;
}
cout << "Rezultat je " << s << endl;
return 0;
}
odnosno sa
Code:
#include <iostream>
using namespace std;
int main()
{
int i,j,k,n,s,s0;
cout << "Unesi prirodan broj " << flush;
cin >> n;
s = 0;
s0 = 0;
for (i=1; i<=n ; i=i+1)
{
s0 = s0 + n;
s = s+n+(s0*s0/2)*(2*s0+1)*(s0+1)*s0/6+(n+s0*s0+i*s0+s0/2)*(s0+1)*s0/2+(i*s0*s0+(i*i*s0*s0+i*s0)/2)*s0;
}
cout << "Rezultat je " << s << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int i,j,k,n,s,s0;
cout << "Unesi prirodan broj " << flush;
cin >> n;
s = 0;
s0 = 0;
for (i=1; i<=n ; i=i+1)
{
s0 = s0 + n;
s = s+n+(s0*s0/2)*(2*s0+1)*(s0+1)*s0/6+(n+s0*s0+i*s0+s0/2)*(s0+1)*s0/2+(i*s0*s0+(i*i*s0*s0+i*s0)/2)*s0;
}
cout << "Rezultat je " << s << endl;
return 0;
}
U originalnom programu je bila štamparska greška. Pisalo je s0 = s + n umesto s0 = s0 + n. Sada je to ispravljeno.
Primetimo da izračunavanje s0 nije zavisno od izračunavanja s. Odatle se lako zaključuje da je zapravo s0=i*n. Stoga je program ekvivalentan programu
Code:
#include <iostream>
using namespace std;
int main()
{
int i,j,k,n,s,s0;
cout << "Unesi prirodan broj " << flush;
cin >> n;
s = 0;
s0 = 0;
for (i=1; i<=n ; i=i+1)
{
s = s+n+(i*n*i*n/2)*(2*i*n+1)*(i*n+1)*i*n/6+(n+i*n*i*n+i*i*n+i*n/2)*(i*n+1)*i*n/2+(i*i*n*i*n+(i*i*i*n*i*n+i*i*n)/2)*i*n;
}
cout << "Rezultat je " << s << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int i,j,k,n,s,s0;
cout << "Unesi prirodan broj " << flush;
cin >> n;
s = 0;
s0 = 0;
for (i=1; i<=n ; i=i+1)
{
s = s+n+(i*n*i*n/2)*(2*i*n+1)*(i*n+1)*i*n/6+(n+i*n*i*n+i*i*n+i*n/2)*(i*n+1)*i*n/2+(i*i*n*i*n+(i*i*i*n*i*n+i*i*n)/2)*i*n;
}
cout << "Rezultat je " << s << endl;
return 0;
}
Pošto je n+(i*n*i*n/2)*(2*i*n+1)*(i*n+1)*i*n/6+(n+i*n*i*n+i*i*n+s0/2)*(s0+1)*s0/2+(i*i*n*i*n+(i*i*i*n*i*n+i*i*n)/2)*i*n polinom po i, a pritom je dat i postupak za svođenje ovakvog zadatka na funkcije, za koje je dat postupak računanja, mogao bi neko da dokusuri ovaj zadatak.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.