
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <functional>

using namespace std;

static int inner_count_f1 = 100000;
static int inner_count_f2 = 1000000;
static int outer_count = 1000;

int getNum(int highest)
{
  int r = rand();
  double v = (double)highest/(double)RAND_MAX * (double)r;
  return highest; // (int)v;
}

int f1a(int x)
{
  int i,t=0,c=getNum(inner_count_f1)/2;
  for(i=0;i<c;++i) t+=i;
  return i*x+t;
}

int f1(int x)
{
  int i,t=0,c=getNum(inner_count_f1);
  for(i=0;i<c;++i) t+=f1a(x);
  return i*x+t;
}

int f2a(int x)
{
  int i,t=0,c=getNum(inner_count_f2)/2;
  for(i=0;i<c;++i) t+=i;
  return i*x+t;
}

int f2(int x)
{
  int i,t=0,c=getNum(inner_count_f2);
  for(i=0;i<c;++i) t+=f2a(x);
  return i*x+t;
}

int main(int argc, char* argv[])
{
  if(argc<4)
    {
      cerr << "Usage: " << argv[0]
	   << " outer_count inner_count_f1 inner_count_f2" << endl;
      return -1;
    }

  time_t t;
  time(&t);
  srand(t);

  outer_count = atoi(argv[1]);
  inner_count_f1 = atoi(argv[2]);
  inner_count_f2 = atoi(argv[3]);
  int x=0,i=0;

  for(int i=0;i<outer_count;++i)
    {
      //      cout << "iterator " << i << endl;
      x += f1(i) - f2(i);
    }

  cout << x << endl;

  return 0;
}

