Also you can ignore constraint 6, since it's taken by the other ones.
Edit: Didn't spend too much time on it, so I could be wrong, but I get 149 with this:
import java.lang.Math;
public class Mathproblem
{
public static void main(String[] args)
{
int N = 10;
int xmax = 0;
for (int x = 1; x <= 59; x++)
{
for (int y = 1; y <= 110; y++)
{
double dummy1 = ((double)(999)/x);
double dummy2 = ((double) y)/100 + 1;
N = (int) Math.min(N,Math.ceil(Math.log(dummy1)/Math.log(dummy2) + 1));
if (Math.ceil(Math.log(dummy1)/Math.log(dummy2) + 1) == N )
{
xmax = Math.max(x, xmax);
}
}
}
for (int x = 60; x <= 149; x++)
{
for (int y = 1; y <= 90; y++)
{
double dummy1 = ((double)(999)/x);
double dummy2 = ((double) y)/100 + 1;
N = (int) Math.min(N,Math.ceil(Math.log(dummy1)/Math.log(dummy2) + 1));
if (Math.ceil(Math.log(dummy1)/Math.log(dummy2) + 1) == N )
{
xmax = Math.max(x, xmax);
}
}
}
for (int x = 150; x <= 249; x++)
{
for (int y = 1; y <= 50; y++)
{
double dummy1 = ((double)(999)/x);
double dummy2 = ((double) y)/100 + 1;
N = (int) Math.min(N,Math.ceil(Math.log(dummy1)/Math.log(dummy2) + 1));
if (Math.ceil(Math.log(dummy1)/Math.log(dummy2) + 1) == N )
{
xmax = Math.max(x, xmax);
}
}
}
for (int x = 250; x <= 315; x++)
{
for (int y = 1; y <= 20; y++)
{
double dummy1 = ((double)(999)/x);
double dummy2 = ((double) y)/100 + 1;
N = (int) Math.min(N,Math.ceil(Math.log(dummy1)/Math.log(dummy2) + 1));
if (Math.ceil(Math.log(dummy1)/Math.log(dummy2) + 1) == N )
{
xmax = Math.max(x, xmax);
}
}
}
System.out.print(xmax);
}
}
N = 4