/******************************************************************************/
/* */
/* COMPUTE THE MINIMUM ELEMENT IN A LOOP */
/* 03/26/10 (dkc) */
/* */
/* This C program finds the minimum element in a loop. "l" is the number of */
/* elements in the 3n+c sequence where the next element of the sequence is */
/* (3n+c)/2 if n is odd or n/2 if n is even. "n" is the number of odd */
/* elements in the sequence. The minimum element is found (usually) for */
/* some interrelated loop when 2**l-3**n=c. Some c, l, and n values are; */
/* */
/* 5, 5, 3 (finds minimum element) */
/* 13, 8, 5 (finds minimum element in one interrelated loop) */
/* 47, 7, 4 (finds minimum element) */
/* -1, 3, 2 (finds minimum element) */
/* -11, 4, 3 (finds minimum element) */
/* -49, 5, 4 (finds minimum element) */
/* -115, 7, 5 (finds minimum element in one interrelated loop) */
/* */
/* -17, 6, 4 (doesn't find minimum element) */
/* */
/******************************************************************************/
#include <stdio.h>
#include <math.h>
int main () {
int c=13; // c
int l=8; // length of loop
int n=5; // number of odd elements in loop
int g,h,j,k,a,b,sum;
double x;
FILE *Outfp;
Outfp = fopen("out14a.dat","w");
printf("l=%d, n=%d, c=%d \n",l,n,c);
sum=0;
for (j=1; j<=l; j++) {
a=j*n;
if (a==((a/l)*l))
a=a/l;
else
a=(a/l)+1;
b=(j-1)*n;
if (b==((b/l)*l))
b=b/l;
else
b=(b/l)+1;
k=1;
k=k<<(j-1);
if (n<a)
printf("error \n");
g=1;
for (h=0; h<(n-a); h++)
g=g*3;
sum=sum+(a-b)*k*g;
}
printf("sum=%d \n",sum);
k=1;
k=k<<l;
g=1;
for (h=0; h<n; h++)
g=g*3;
k=k-g;
printf("k=%d \n",k);
x=(double)sum*(double)c/(double)k;
printf("x=%e \n",x);
fclose(Outfp);
return(0);
}