一点也不懂,看也看不懂。。
http://www.cppblog.com/varg-vikernes/archive/2011/02/08/139804.html
#include <iostream> using namespace std; int n, m, d, k; void mul(long long a [], long long b []) { int i, j; long long c[501]; for (i = 0; i < n; ++i)for (c[i] = j = 0; j < n; ++j)c[i] += a[j] * b[i >= j ? (i - j) : (n + i - j)]; for (i = 0; i < n; b[i] = c[i++] % m); } long long init[505], tmp[505]; int main() { int i, j; while (~scanf_s("%d%d%d%d", &n, &m, &d, &k)) { memset(init, 0, sizeof(init)); memset(tmp, 0, sizeof(tmp)); for (i = 0; i < n; ++i)scanf_s("%I64d", &init[i]); for (tmp[0] = i = 1; i <= d; ++i)tmp[i] = tmp[n - i] = 1; while (k) { if (k & 1)mul(tmp, init); mul(tmp, tmp); k >>= 1; } for (i = 0; i < n; ++i)if (i)printf(" %I64d", init[i]); else printf("%I64d", init[i]); printf("\n"); } return 0; } |