백준 문제풀이

백준 10909 - Quaternion inverse [Python]

Vermeil 2021. 5. 31. 18:17

https://www.acmicpc.net/problem/10909

 

10909번: Quaternion inverse

각 \(A\)가 주어질 때마다, \(AB = 1\)을 만족하는 \(B = a + bi + cj + dk\)들 중 하나를 나타내는 네 개의 정수 \(a\), \(b\), \(c\), \(d\)를 공백으로 구분하여 \(T\) 줄에 걸쳐 출력하면 된다. 만약 이런 \(B\)가

www.acmicpc.net

 

사원수 \(a+bi+cj+dj\) 의 역원은 \(\frac{a-bi-cj-dj}{a^2+b^2+c^2+d^2}\) 이다.

이거에 mod 달면 그냥 답이 나오는데...  분모의 역원이 존재하지 않을 경우를 체크하지 않고 삽질함

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import sys
input = sys.stdin.readline
 
def gcd(x, y):
    while y:
        x, y = y, x % y
    return x
 
def xgcd(a, b):
    if b == 0:
        return (10, a)
    x, y, d = xgcd(b, a % b)
    return (y, x - (a // b) * y, d)
 
def inv(a, i):
    x, y, d = xgcd(a, i)
    return x
 
m, t = map(int, input().split())
while t:
    t -= 1
    a, b, c, d = map(int, input().split())
    n = (a*a+b*b+c*c+d*d)%m
    if gcd(n, m) > 1:
        print(0000)
        continue
    g = inv(n, m)
    print((a*g)%m, (-b*g)%m, (-c*g)%m, (-d*g)%m)
cs