1-1 改错题

1-1 改错题

查找介于n1与n2(0<n1<n2<32768)之间所有满足下列条件的整数:(1)该数的十进制表示中有且仅有两个相同的数字位;(2)该数是素数。
输入两行,第1行一个整数n1,第2行一个整数n2。
输出多行,每行8个整数,分隔符为Tab。
【含有错误的源程序】
#include<stdio.h>
#include<math.h>
int validate(int n)
{ int i,j,k=0,num[5]={0},size=0;
do
{ num[size]=n%10;
n=n/10;
size++;
}while(n<0);
for(i=0;i<size-1;i++)
for(j=i+1;j<size;j++)
if(num[i]==num[j])
k=k+1;
if(k>1)
return 1;
else
return 0;
}
int prime(int)
{ int i;
for (i=2;i<=(int)sqrt(n);i++)
if(n%i==0)return 0;
return 1;
}
void main()
{ int i,count=0,n1,n2;
scanf("%d%d",&n1,&n2);
for(i=n1;i<=n2;i++)
{ if(validate(int i)&& prime(int i))
{ count++;
printf("%d\t",i);
if(count%8==0)printf("\n");
}
}
}

测试样例:
输入

900
1200

输出

911    919    929    977    991    997    1009    1013
1019   1021   1031   1033   1051   1061   1091    1103
1109   1123   1129   1153   1163   1187   1193