Saya berada di rumah seorang teman untuk makan malam dan mereka menyarankan ide "ruang vektor faktor Utama". Dalam ruang ini bilangan bulat positif dinyatakan sebagai vektor sehingga elemen ke- n dalam vektor adalah berapa kali bilangan ke- n membagi angka tersebut. (Perhatikan bahwa ini berarti vektor kita memiliki jumlah syarat yang tak terbatas.) Misalnya 20 adalah
2 0 1 0 0 0 ...
Karena faktorisasi utamanya adalah 2 * 2 * 5 .
Karena faktorisasi prima adalah unik, setiap angka berhubungan dengan satu vektor.
Kami dapat menambahkan vektor dengan menambahkan entri secara berpasangan. Ini sama dengan mengalikan angka yang dikaitkan dengan mereka. Kita juga bisa melakukan perkalian skalar, yang mirip dengan menaikkan angka terkait ke suatu kekuatan.
Masalahnya adalah bahwa ruang ini sebenarnya bukan ruang vektor karena tidak ada invers. Jika kita teruskan dan menambahkan invers dan menutup ruang vektor, kita sekarang memiliki cara untuk mengekspresikan setiap bilangan rasional positif sebagai vektor. Jika kita menjaga fakta bahwa penambahan vektor mewakili perkalian. Maka kebalikan dari bilangan alami adalah kebalikannya.
Misalnya angka 20 memiliki vektor
2 0 1 0 0 0 ...
Jadi pecahan 1/20 adalah kebalikannya
-2 0 -1 0 0 0 ...
Jika kita ingin menemukan vektor yang terkait dengan fraksi seperti 14/15 kita akan menemukan 14
1 0 0 1 0 0 ...
dan 1/15
0 -1 -1 0 0 0 ...
dan gandakan dengan melakukan penambahan vektor
1 -1 -1 1 0 0 ...
Sekarang kita memiliki ruang vektor, kita dapat memodifikasinya untuk membentuk ruang produk dalam dengan memberikannya produk dalam. Untuk melakukan ini, kami mencuri produk dalam bahwa ruang vektor diberikan secara klasik. Produk dalam dari dua vektor didefinisikan sebagai jumlah dari perkalian berpasangan dari istilah mereka. Misalnya 20 · 14/15 akan dihitung sebagai berikut
20 = 2 0 1 0 0 0 ...
14/15 = 1 -1 -1 1 0 0 ...
2 0 -1 0 0 0 ... -> 1
Sebagai contoh lain produk 2/19 · 4/19
2/19 = 1 0 0 0 0 0 0 -1 0 0 0 ...
4/19 = 2 0 0 0 0 0 0 -1 0 0 0 ...
2 0 0 0 0 0 0 1 0 0 0 ... -> 3
Tugas Anda adalah mengimplementasikan program yang menjalankan produk titik ini. Ini harus mengambil dua bilangan rasional positif melalui sepasang bilangan bulat positif (pembilang dan penyebut) atau tipe rasional (pelampung tidak diperbolehkan, karena mereka menyebabkan masalah dengan presisi dan keterbagian) dan harus menghasilkan bilangan bulat yang mewakili produk titik dari keduanya. input.
Ini adalah kode-golf sehingga jawaban akan dicetak dalam byte dengan lebih sedikit byte yang lebih baik.
Uji Kasus
4 · 4 = 4
8 · 8 = 9
10 · 10 = 2
12 · 12 = 5
4 · 1/4 = -4
20 · 14/15 = 1
2/19 · 4/19 = 3