Code:
#include <stdio.h>
#include <stdlib.h>
void calculate(int n, int m)
{
int i;
float result;
int *a;
result = 0;
a = malloc(m * sizeof(int));
for(i = 0; i < n; i++)
a[i] = i + 1;
for(i; i < m; i++)
a[i] = (i)*(m - 1);
for(i = 0; i < m; i++)
result += ((i+1)/a[i]);
printf("%f\n", result);
free(a);
}
int main(int argc, char *argv[])
{
calculate(1234, 12345);
calculate(24, 24);
calculate(4, 6);
calculate(5, 7);
return(0);
}
Ovaj kod radi samo ako je n <= m.
A evo kako radi:
za sve a
(i < n) a = i+1 (i+1 zato sto je prvi element a[0] a ne a[1]).
Za sada imamo zbir = n - 1;
I od ostatka treba samo zbir bude jednak 1.
Znaci za sve a (i >= n) a = (i+1)*(m-1).
Var result sam stavio kao float da bih bio siguran da je zbir tacan, da ne bi bilo zaokruzivanja int-a.
Nadam se da sam ti pomogao.
Ovaj kod u stvari nije dobar zato sto je tvoja formula tacna zamo ako n <= Sum(i, 1..n).
Ja sam uradio samo za n <= m.
Pa ti vidi kako bi uradio ostatak.
Srecno.
"The problem with the world is that everyone is a few drinks behind."
-Humphrey Bogart