【大整数取余,总是超时怎么改进一下?】

求大牛帮帮忙
对于一个超大整数X(非负数),有n个数字b1,b2,……,bn作为X的基,基需要满足的条件是:
1) 1 < bi <= 1000 (1 <= i <= n),
2) gcd(bi,bj) = 1 (1 <= i,j <= n, i ≠ j).——GCD就是最大公约数啦~
题目大概就是:有T组测试样例,每组测试样例:
输入包括3行,第一行是基的个数n,第二行是n个基,第三行是超大整数X(X will be 400 or fewer characters in length)400位,需要用字符串处理。
输出:The output format is:(r1,r2,...,rn)——rn就是X%bn
样例输入
2
3
2 3 5
10
4
2 3 5 7
13
样例输出
(0,1,0)
(1,1,3,6)
下面是我的代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char x[401];
int X[401];
int MOD(char x[], int y) {
int i, l, t = 0;
l = strlen(x);
for (i = 0; i < l; i++) {
X[i] = x[i]-'0'; //把字符串x里的各个位的字符换成数字
}
for (i = 0; i < l; i++) {
t = (t*10+X[i])%y; //从第一位开始对基取余,然后乘10再取余,循环。
}
return (t);
}
int main(){
int T, n, i, a[101];
scanf("%d", &T);
for (; T > 0; T--) {
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]); //输入n个基
}
getchar(); //排除scanf最后的\0影响
gets(x); //输入大整数x(字符串格式)
printf("(");
for (i = 0; i < n-1; i++){
printf("%d,", MOD(x,a[i]));
}
printf("%d)\n", MOD(x,a[n-1]));
} //保证输出模式一致
return 0;
}

简单的测试都能过,但基太多就会超时