Šta nam omogućavaju izračunati polinomi





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

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.