Convert algorithm to a formula

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
2 replies · 2K views
mryoussef2012
Messages
6
Reaction score
0
Hi
Please can someone help me convert this algorithm to a mathematical formula ?

function fun(int x)
{
int c = 0 ;
for(int i=2;i<floor(x/2);i++)
{
if(floor(x/i) > i-1)
for(int j=0;j<floor(x/i)-i+1;j++)
c++;
}

return c;
}

thanks
 
Physics news on Phys.org
Code:
for(int j=0;j<floor(x/i)-i+1;j++)
  c++;

This just counts how many times j<floor(x/i)-i+1.
In other words, you can replace it with
c+=floor(x/i)-i+1;

Next:
if(floor(x/i) > i-1)
As the left side cannot increase (with increasing i) and the right side always increases, this is true up to some specific i. Both sides are integers, so the statement is equivalent to
if(floor(x/i) >= i)
Written in that way, it is possible to drop floor() completely (check this!) as i is an integer:
if(x/i >= i)
which is just
if(i^2 <= x)

Simplified code:
Code:
function fun(int x)
{
  int c = 0 ;
  for(int i=2;i<floor(x/2);i++)
  {
    if(i^2 <= x)
      c+=floor(x/i)-i+1;
  }
  return c;
}

Now you have two upper limits for i, so it is reasonable to split that in two cases. Can you find them? The border is a specific integer.
It could be tricky (or even impossible) to find an explicit way to sum those floor(x/i), but it is certainly possible to write it as a sum in a formula.
 
Thanks mfb , that was great