最大値は100と言っているのに、最小値に言及がないのは、問題として不自然な気が…
もし、勝手に最小値は0だと仮定してしまえば、

int have[101];

というテーブルを作ることで、sortは必要なく、こんな感じでできるのでは?

int get_length(int x, int step)
{
int cnt;
if( 0 <= x-step && have[x-step])
return 0;
for(cnt=0; x<=100 && have[x]; x+=step, cnt++);
return cnt;
}


int length;
for(start=0;start<=100;start++){
if(have[start]){
for(step=1;start+max_length*step<=100;step++){
length=get_length(start,step);
if(max_length < length)
max_length=length;
}
}
}