나는 저녁 식사를 위해 친구의 집에 있었고 "프라임 팩터 벡터 공간"이라는 아이디어를 제안했습니다. 이 공간에서 양의 정수는 벡터로 표현되어 벡터의 n 번째 요소가 n 번째 소수가 숫자를 나누는 횟수가되도록합니다. (이것은 벡터에 무한한 수의 항이 있다는 것을 의미합니다.) 예를 들어 20 은
2 0 1 0 0 0 ...
소인수 분해가 2 * 2 * 5 이므로 .
소인수 분해가 고유하기 때문에 각 숫자는 하나의 벡터에 해당합니다.
항목을 쌍으로 추가하여 벡터를 추가 할 수 있습니다. 이것은 관련된 숫자를 곱하는 것과 같습니다. 또한 스칼라 곱셈을 수행 할 수 있는데, 이는 연관된 숫자를 거듭 제곱하는 것과 유사합니다.
문제는이 공간이 실제로 벡터 공간이 아니라는 것입니다. 계속해서 역수를 더하고 벡터 공간을 닫으면 모든 양의 유리수를 벡터로 표현할 수 있습니다. 벡터 덧셈은 곱셈을 나타냅니다. 그런 다음 자연수의 역수는 역수입니다.
예를 들어 숫자 20 에는 벡터가있었습니다
2 0 1 0 0 0 ...
분수 1/20 은 그 역수입니다
-2 0 -1 0 0 0 ...
14/15 와 같은 분수와 관련된 벡터를 찾으려면 14를 찾습니다
1 0 0 1 0 0 ...
그리고 1/15
0 -1 -1 0 0 0 ...
벡터 덧셈을 수행하여 곱하십시오
1 -1 -1 1 0 0 ...
이제 벡터 공간이 생겼으므로 내부 제품을 제공하여 내부 제품 공간을 형성하도록 벡터 공간을 수정할 수 있습니다. 이를 위해 우리는 벡터 공간이 고전적으로 주어진 내부 생성물을 훔칩니다. 두 벡터의 내부 곱은 항의 쌍별 곱셈의 합으로 정의됩니다. 예를 들어 20 · 14/15 는 다음과 같이 계산됩니다.
20 = 2 0 1 0 0 0 ...
14/15 = 1 -1 -1 1 0 0 ...
2 0 -1 0 0 0 ... -> 1
다른 예로 제품 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
당신의 임무는이 내적을 수행하는 프로그램을 구현하는 것입니다. 양의 정수 쌍 (분자 및 분모) 또는 합리적 유형 (정밀도와 나누기 문제가 발생하기 때문에 부동 소수점이 허용되지 않음)을 통해 양의 양의 유리수를 가져와야하며,이 둘의 내적을 나타내는 정수를 출력해야합니다. 입력.
이것은 코드 골프 이므로 바이트 수가 적을수록 답이 바이트로 표시됩니다.
테스트 사례
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