canuc80k6304·5/32

Định Thức Trên Vành

Nộp bài trên LQDOJ

Bài 63 · Gaussian Elimination

Cho ma trận vuông cấp và mô-đun . Số không được bảo đảm là số nguyên tố. Hãy tính định thức của theo modulo .

Input

  • Dòng đầu chứa hai số nguyên và .
  • Mỗi trong dòng tiếp theo chứa số nguyên; số thứ trên dòng thứ là .

Output

  • In một số nguyên trong đoạn bằng . Khi , hãy in .

Constraints

  • .
  • .
  • .
  • có thể là hợp số.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

2 8
1 2
3 4

Output

6

Giải thích: Định thức bằng , và .

Lời giải tóm tắt
  • Ý tưởng: Không thể dùng nghịch đảo Fermat vì p có thể hợp số. Ở cột i, với mỗi hàng j>i, áp dụng thuật toán Euclid lên cặp a[i][i],a[j][i]: lấy thương nguyên q=a[i][i]/a[j][i], thay R_i bởi R_i-qR_j rồi đổi hai hàng. Cộng bội một hàng không đổi định thức; đổi hàng làm đổi dấu. Giá trị pivot giảm như phép chia lấy dư nên vòng lặp kết thúc mà không cần phép chia modulo.
  • Ý tưởng: Khi ma trận đã tam giác trên, định thức là tích đường chéo nhân dấu của số lần đổi hàng. Nếu một pivot bằng 0, kết quả là 0. Độ phức tạp an toàn là O(n^3 log p), bộ nhớ O(n^2).