Saya penggemar berat teori bilangan. Hal besar dalam teori bilangan adalah aritmatika modular; definisi menjadi jika dan hanya jika m \ mid ab . Hal yang menyenangkan untuk dilakukan adalah meningkatkan kekuatan: terutama ketika modulus adalah bilangan prima. Secara khusus, telah terbukti bahwa jika a dan m relatif prima (tidak berbagi faktor umum selain 1 ) maka ada bilangan e sehingga a ^ e \ equiv 1 \ mod m .
Saya akan menjelaskan apa latihan itu dengan sebuah contoh. Mari kita ambil modulus . Output yang mungkin dari program atau fungsi adalah:
3 2 6 4 5 1
2 4 1 2 4 1
6 1 6 1 6 1
4 2 1 4 2 1
5 4 6 2 3 1
1 1 1 1 1 1
Setiap baris adalah daftar kekuatan angka pertama di baris itu: baris pertama adalah , yang setara dengan modulo . Baris kedua dari persegi di atas adalah kekuatan , dan sebagainya, hingga baris terakhir, yang hanya kekuatan .
Ini adalah kotak modulo ajaib karena:
- Kuadratnya simetris; yaitu, kolom ke- sama dengan baris ke- .
- Semua nilai hingga muncul setidaknya sekali.
Di bawah ini adalah satu-satunya output valid lainnya untuk , dimulai dengan pangkat :
5 4 6 2 3 1
4 2 1 4 2 1
6 1 6 1 6 1
2 4 1 2 4 1
3 2 6 4 5 1
1 1 1 1 1 1
Tantangan
Buat fungsi atau program yang memberikan p
output utama persegi modulo ajaib, yaitu, persegi dengan panjang sisi p-1
, sehingga setiap baris adalah daftar kekuatan berurutan dari elemen pertama di baris, dan sama untuk kolom. Semua angka antara 0
dan p
harus terjadi, dan kuadrat hanya dapat berisi angka dalam rentang itu.
Input adalah angka atau string, dan output bisa ascii, sebuah matriks, array array (format apa pun yang masuk akal).
Ini kode-golf, jadi kode terpendek menang.