//Two-sample Smirnov Calculation by Kim and Jennrich
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <fstream.h>
#include <iomanip.h>
double AKSCDF(int, int, double);
int lcd(int,int);
double alpha=.01;
int main()
{int k, n1, n2, n2count, denom;
//n2 is smaller sample size
double pmax, pmin;
cout << "n1 " << "n2" << " alphaL " << " alphaR " << endl;
for (n1=40; n1<=160; n1=n1+40)
{
for (n2count=1; n2count<=5; n2count++)
{
switch(n2count)
{case 1: n2=n1/4; break;
case 2: n2=2*n1/5; break;
case 3: n2=n1/2; break;
case 4: n2=3*n1/4; break;
case 5: n2=n1; break;
default: n2=n1;
}
pmin=2;
pmax=2;
k=1;
denom=lcd(n1,n2);
while ((k<=denom) && (pmax>=alpha))
{
pmax=AKSCDF(n2,n1,float(k)/float(denom));
if (pmax>=alpha)
{pmin=pmax;
k++;}
}//end while k
cout << n1 << " & "<< n2 << " & "<< pmax << " & "<< pmin << endl;
}//end for n2
}//end for n1
}//end main
double AKSCDF(int m, int n, double d)
//m is smaller sample size
{double u[801],w;
int i,j,k,mult;
mult=lcd(m,n);
k=m*n*(d-1.0/mult)+0.5;
u[1]=1;
for (j=1; j<=n; j++)
{
u[j+1]=1.0;
if(m*j>k) u[j+1]=0.0;
}//end for j
for (i=1; i<=m; i++)
{
w=float(i)/float(i+n);
u[1]=w*u[1];
if(n*i>k) u[1]=0.0;
for (j=1; j<=n; j++)
{
u[j+1]=u[j]+u[j+1]*w;
if(abs(n*i-m*j)>k) u[j+1]=0.0;
}//end for j
}//end for i
//if (fabs(d-.45)<.0001) for (i=1; i<=n+1; i++) cout << i << " " << u[i] << endl;
return 1-u[n+1];
} // END AKSCDF
int lcd(int n1, int n2)
{int r,//gcd
m,n;
m=n1; n=n2;
do
{r=m%n;
m=n;
n=r;
}
while (r>0);
return n1*n2/m;
}//end lcd