>>347
途中の桁あふれは少々怖いがnで割るのは後でまとめてみよう。
少しは速くなるかも。

void mul(int *c, int *a, int *b, int r, int n) {
 int i, j;
 for (i = 0; i < r; i++) c[i] = 0;
 for (i = 0; i < r - 1; i++) {
  for (j = 0; j < r - i; j++)
   c[i+j] += a[i]*b[j];
  for (j = r - i; j < r; j++)
   c[i+j-r] += a[i]*b[j];
 }
 for (i = 0; i < r; i++) c[i] %= n;
}