C语言 中国剩余定理 超时了,哪位大神帮忙解决一下
#include<stdio.h>
int main()
{
unsigned a[8], b[8], c[8], flag;
int i, k, min;
long long answer = 0, plus = 1, j;
for(i = 0; i < 8; i ++)
scanf("%d", &a[i]);
for(i = 0; i < 8; i ++)
scanf("%d", &b[i]);
min = a[0];
for(i = 0; i < 8;i ++)
{
plus = plus*a[i];
min = min > a[i]? a[i]:min;
for(j = 1; ; j ++)
{
flag=j * a[i] + 1;
for(k = 0; k < 8; k ++)
{
if(k != i)
if(flag%a[k] != 0) break;
}
if(k == 8)
{
c[i] = flag;
answer = answer + b[i] * c[i];
break;
}
}
}
j = answer%plus;
if(min > j) j += plus;
printf("%lld", j);
return 0;
}