mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-12-09 23:58:40

곱셈

연산
Numbers and Operations
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#765432> 수 체계 자연수 ( 홀수 · 짝수 · 소수 · 합성수) · 정수 · 유리수 ( 정수가 아닌 유리수) · 실수 ( 무리수 · 초월수) · 복소수 ( 허수) · 사원수
표현 숫자 ( 아라비아 숫자 · 로마 숫자 · 그리스 숫자) · 기수법( 과학적 기수법 · E 표기법 · 커누스 윗화살표 표기법 · 콘웨이 연쇄 화살표 표기법 · BEAF· 버드 표기법) · 진법 ( 십진법 · 이진법 · 8진법 · 12진법 · 16진법 · 60진법) · 분수 ( 분모 · 분자 · 기약분수 · 번분수 · 연분수 · 통분 · 약분) · 소수 { 유한소수 · 무한소수 ( 순환소수 · 비순환소수)} · 환원 불능 · 미지수 · 변수 · 상수
연산 사칙연산 ( 덧셈 · 뺄셈 · 곱셈 구구단 · 나눗셈) · 역수 · 절댓값 · 제곱근 ( 이중근호) · 거듭제곱 · 로그 ( 상용로그 · 자연로그 · 이진로그) · 검산 · 연산자 · 교환자
방식 암산 · 세로셈법 · 주판 · 산가지 · 네이피어 계산봉 · 계산기 · 계산자
용어 이항연산( 표기법) · 항등원과 역원 · 교환법칙 · 결합법칙 · 분배법칙
기타 수에 관련된 사항 ( 0과 1 사이의 수 · 음수 · 작은 수 · 큰 수) · 혼합 계산 ( 48÷2(9+3) · 111+1×2=224 · 2+2×2) · 0으로 나누기( 바퀴 이론) · 0의 0제곱 }}}}}}}}}
<colbgcolor=#f5f5f5,#2d2f34> 언어별 명칭
기호 ×, , *
한국어 곱셈, 곱하기, 승법(), 승산()
영어 multiplication, multiply, product, times[1]
{{{#!wiki style="margin:0 -10px -5px"
{{{#!folding 기타 [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-5px -1px -10px"
<colbgcolor=#f5f5f5,#2d2f34> 일본어 [ruby(乗法, ruby=じょうほう)], [ruby(掛け算, ruby=かけざん)], [ruby(乗算, ruby=じょうざん)]
중국어 乘法(chéngfǎ) }}}}}}}}}

1. 개요2. 기호3. 정의4. 예제5. 곱셈의 역원 - 나눗셈6. 큰 수의 곱셈 알고리즘7. 기타

[clearfix]

1. 개요

가장 잘 알려진 이항연산이자 사칙연산의 하나로, 어떤 수를 거듭해서 더하는 연산이다. 따라서 덧셈과 뺄셈을 배우고 나서 곱셈을 배우게 된다. 보통 초등학교 2학년 때 배우나, 과거 일제강점기 간이학교에서는 1학년 때 배우기도 했다.[2] 가감제에 해당한다.

2. 기호

항상 [math(+)]나 [math(-)]로 표기되는 덧셈/뺄셈과는 달리 다양한 기호를 사용하는 것이 특징이다. 연산자를 생략하는 투명 기호부터 시작해서 가장 기초 수준에서 배우는 [math(\times)][3], 중등 교육 과정에서 사용하는 [math(cdot)] [4], 두 벡터 텐서를 만들 때 사용하는 ⊗, 컴퓨터에서 X와의 혼동을 피하기 위한 *[5] 등등...

초등학교에서 처음으로 배울 때 쓰이는 곱셈 기호 [math(\times)]는 윌리엄 오트레드 산술의 원리를 논하기 위해 1631년에 쓴 책 <수학의 열쇠>에서 처음 쓰였다. 이 당시만 해도 곱셈은 매우 수준 높은 연산이어서 대학교에나 가서 배울 수 있던 지식이었는데, [math(\times)]의 도입으로 처음으로 곱하기를 추상화할 수 있게 된다. 여담이지만 원래 [math(+)]를 쓰려 했는데 이미 존재해서 '그래? 그럼 돌려!' 해서 나온 게 이 기호라는 속설이 있다. 이 책에서는 뺄셈에 ~ 기호를 사용했다.

또한 기호 [math(\cdot)] 는 동시대 수학자인 토마스 해리엇이 자주 썼으며, 후에 라이프니츠가 본격적으로 채용한 뒤로 널리 퍼졌다고 한다. 해리엇은 또한 지수 기호, 부등호 역시 발명하고, 갈릴레이와 독립적으로 흑점을 발견하는 등, 상당히 많은 일을 했던 사람이다.

곱셈 기호를 생략하는 경우는 숫자와 문자, 문자끼리의 곱에만 해당된다. 미분방정식에서 델([math(nabla)])에 투명 기호가 쓰인 것은 그레이디언트(경사, grad)라는 연산으로 따로 정의한다.

급수의 곱하기는 [math(Pi)]를 쓴다.

3. 정의

초등학교에서 곱셈을 처음 배울 땐 덧셈의 반복 횟수로 배우는 것이 보통이다. [math(2+2+2=6)]에서 2가 3번 더해졌으니 [math(2×3=6)]으로 배우는 것.[6] 하지만 이 개념으로 곱셈을 인지하고 있다가 수 체계의 범위가 넓어질 때, 즉 [math((-2)×(-3))]같은 음수 곱하기 음수나 분수 곱하기 분수 등으로 넓어지는 때에 조금씩 흔들리다가 [math((0.12)×(5.3))]같은 소수 곱하기 소수 등에 다다라서는 이해의 한계에 도달하는 게 보통이다. 0.12를 5.3번 더하는 게 도대체 무슨 뜻일까?[7] 아예 1 미만의 소수를 곱하면 오히려 숫자가 줄어든다!

그러다가 아예 [math(π×e)]같은 일반적인 실수 개념으로 넘어오면 그냥 덧셈의 확장으로 곱셈을 이해하는 쪽이 손해. 사실 실수와 실수간의 곱셈은 실수의 완비성이 엄밀하게 정의되어야 하는 등 기초 작업이 많이 필요한 일이지만 실수의 완비성마저 엄밀한 집합론 및 해석학이 동원되어야 하는 고행길을 걸어가야 하기 때문에, 고등학교에서는 "곱셈? 그거 그냥 두 개 붙이면 되는 거 아닌가?" 하고 그러려니 하고 넘기며, 유리수같이 이런 개념으로 커버할 수 있는 부분이 되면 덧셈->곱셈 개념으로 잠깐씩 생각하는 게 보통.

하지만 그렇다고 덧셈에서 곱셈으로 생각하는 개념에 의미가 없다고는 못한다. 덧셈에서 곱셈으로 확장되듯이 곱셈도 "몇 번 곱해졌나"의 개념으로 지수로 확장될 수 있으며 실수/허수로 들어서면 이런 사고방식 또한 무뎌진다. 지수 역시 테트레이션이라는 상위의 연산으로 확장될 수 있고, 필요하다면 지수와 같은 방식으로 실수같은 간극이 메워질 수 있다. 이것이 하이퍼 연산 개념으로, 수학적 합리성을 추구하기 위한 엄밀한 정의라는 개념을 벗어난 상당히 직관적인 과정이 수학적 사고에 미치는 영향을 엿볼 수 있다. 또한 반대 과정 역시 생각할 수 있다. 일례로 로그를 쓰면 곱셈을 덧셈으로 취급할 수 있다. 자세한 것은 로그 문서 참조.

대학에서 대수학을 추상적으로 배우기 시작하면서부터는 보통 이 두가지 조건을 만족하는 연산을 곱셈이라고 하는 경우가 많다. 실제로는 우리가 알고 있는 곱셈에서부터 파생되는 경우를 배우는 게 대부분이다.

하지만 이게 성립하지 않는 군도 있다. 벡터(의 외적)와 행렬이 대표적인 예. 특히 벡터는 곱셈을 다양하게 정의하는데다 일반적인 "곱셈"과는 다른 양상을 보이는데, 이는 전신인 사원수가 그렇게 생겨먹었기 때문. 사실 수학을 더 깊게 공부하다 보면 가환성을 띄지 않는 곱셈이 더 많다. 예를 들어 집합의 곱셈(=곱집합)이라던가, 유한수열의 결합이라던가, 관계나 함수의 합성이라던가.

기하학적으로는 유클리드 공간상에서 각 축에 평행한 선분으로 구성된 도형[8] 측도를 구하는 연산으로 볼 수 있다.

4. 예제

곱셈구조는 상당히 다양하다. 그 중 대표적인 것은 다음과 같다. 이 중 첫번째는 (홀수)×(홀수) = (홀수), (홀수)×(짝수) = (짝수), (짝수)×(홀수) = (짝수), (짝수)×(짝수) = (짝수) 라는 대표적인 예제가 존재한다.

또한 (양수)×(양수) = (양수), (양수)×(음수) = (음수), (음수)×(양수) = (음수), (음수)×(음수) = (양수) 라는 성질머리도 존재한다.

이외에도 다음 성질이 있다.
한편, 가환군인 경우 이를 이용한 특수한 계산 법칙이 있다. 여기에 대해서는 곱셈 공식, 인수분해 참조.

5. 곱셈의 역원 - 나눗셈

곱하는 것이 있다면 나누는 것도 있기 마련인데 이를 나눗셈이라고 한다. 초등교육 과정에서는 ÷이라는 기호를 쓰나, 그 정체는 다름아닌 분수. 그래서인지 중등 교육과정부터는 아예 분수를 곱하는 것으로 나눗셈을 대체한다. 많은 컴퓨터 프로그래밍 언어에서는 나눗셈을 나타낼 때 ÷ 대신 /를 사용한다.[13]

나눗셈을 할 때 주의할 것이, 0으로 나눠서는 안 된다는 것이다. 0의 특성상 0을 곱해서 0이 아닌 수가 나올 수가 없기 때문이다.[14]

기타 자세한 내용은 나눗셈 문서를 참조.

6. 큰 수의 곱셈 알고리즘

두 개의 [math(n)] 자리수 정수를 곱할 때 일반적으로 우리가 아는 곱셈 방법을 적용한다면, 계산에 걸리는 시간은 각 자리수에 있는 숫자끼리 서로 한 번씩 곱셈이 이루어지는 총 횟수인 [math(n^2)]에 비례한다. 이것을 알고리즘의 시간 복잡도를 점근적으로 표현하는 Big-O 표기법으로는 [math(\mathcal{O}(n^2))]로 나타낼 수 있다.

그런데 컴퓨터 과학이 발전하면서, 수 천 자리 이상의 큰 수의 곱셈에 대해 기존 방법보다 효율적인 여러 곱셈 알고리즘이 개발되었다.

최초로 발견된 빠른 곱셈 알고리즘으로, 소련 태생의 러시아 수학자인 아나톨리 카라추바[15]가 1960년에 발견하고 1962년에 발표한 카라추바 알고리즘에 따르면 연산을 [math(\mathcal{O}(n^{\log_23}) \approx \mathcal{O}(n^{1.585}))]로 가속할 수 있다.

이후 카라추바 알고리즘을 일반화시킨 톰-쿡 알고리즘 [math(\mathcal{O}(n^{\log_35}) \approx \mathcal{O}(n^{1.465}))][16] 고속 푸리에 변환(FFT)을 도입한 쇤하게-슈트라센 알고리즘 [math(\mathcal{O}(n\log n \cdot \log\log n))], 퓌러 알고리즘 [math(\mathcal{O}(n\log n \cdot 2^{\mathcal{O}(\log^* n)}))][17] 등이 개발되게 된다.

현재까지 알려진 가장 빠른 곱셈 알고리즘은 퓌러(Fürer) 알고리즘을 개량하여 2019년에 발표한 하비-판데르후번 알고리즘 [math(\mathcal{O}(n\log n))]이며, 수학자들은 이것을 이론적으로 가능한 가장 빠른 곱셈 알고리즘일 것으로 예상하고 있다.

그러나 비행기와 자동차를 동시에 출발시켰을 때 초반에는 자동차가 더 빠를 수 있는 것처럼[18], 상기한 빠른 곱셈 알고리즘들은 일반 곱셈법과 비교하여 언제나 절대적으로 빠른 것이 아니라, 어디까지나 이론적인 영역에서 곱하는 수의 자리수를 키울수록 점근적으로 빨라질 것이라는 것을 의미한다. 예를 들어, 실제 컴퓨터의 작동 원리에 의한 계산 속도를 고려한다면 카라추바 알고리즘의 경우에는 320~640비트 이상의 자리수를 가지는 큰 수끼리의 곱셈에서 일반적인 곱셈보다 더 효율적인 것으로 알려져 있으며, 가장 최근에 발표된 하비-판데르후번 알고리즘의 경우에는 무려 [math(2^{4096})] 비트 = [math(2^{2^{4096}})] 이상의 큰 수 곱셈부터 효율적일 것이라고 한다.

따라서 이런 알고리즘들은 '일상적으로 보기 힘들 정도로 큰 수'들을 곱할 때나 효율적이지, 2256[19]처럼 작은(?) 수들은 일반적인 곱셈 알고리즘을 사용하는 것이 더 빠르다.

7. 기타

개요에서 서술했듯이 곱셈 기호로 여러가지를 사용하고 하나의 식에서 그것이 혼용이 되어서 사용하기도 하기 때문에 간혹 논란이 발생하기도 한다. 48÷2(9+3) 참고. 비슷하게 나눗셈이 포함된 식에 ÷과 /를 혼용할 경우도 키배가 벌어진다. #

일명 '인도식 계산법'으로 알려진 선을 이용한 계산법이 존재한다. 예를 들어 a와 b라는 숫자가 있다면, a를 가로방향, b를 세로방향으로 선을 긋되 자리수 별로 평행하게 그어, 둘에 교차점을 더하는 방식으로 답을 구하는 방식이다. 한국과 일본에선 흔히 ‘인도식' 계산법으로 알려져 있으나, 이 계산법이 인도에서 처음 쓰였다는 명확한 자료는 존재하지 않는다. 오히려 서양에서는 '일본식' 곱셈 계산법(Japanese multiplication)으로 알려져 있으며, 이 밖에도 중국에서 쓰였다는 설이 존재하는 등, 이 계산법의 유래에 대해서는 알려지는 바가 없다.

곱셈의 성질상, 도형의 넓이를 구할 때 곱셈을 사용하게 된다. 가장 기본적으로 직사각형의 넓이를 가로와 세로의 곱으로 구하는 것에서 모든 도형의 넓이 공식이 도출된다.


[1] 계산을 할 때는 2 times 8 is sixteen 식으로 쓰지만, '나 학교에서 곱하기를 배웠어' 라고 할 때는 multiplication이라는 단어를 사용한다. [2] 1940년 발행된 간이학교 2학년 산수 교과서 1단원의 '前學年ノ復習'(현대 일본어로 쓰면 前学年の復習. 직역하면 '전 학년 내용 복습하기'.) 단원에 곱하기 문제가 일부 수록돼 있다. 이는 간이학교가 2년제 속성 초등교육기관이었기 때문에 일반 소학교에서 6년 동안 배울 내용을 2년 동안 압축해서 배우기 때문이다. [3] 벡터에서는 외적(cross product), 선형대수학에서는 회전(curl)을 나타낸다. [4] 벡터에서는 내적(dot product), 선형대수학에서는 발산(div)을 나타낸다. [5] 수학에서는 쌍대(duality), 합성곱(convolution), 켤레전치(conjugate transpose) 등의 용도로도 쓰인다. [6] 그런데 미국 교육과정 지침이나 오일러의 서적, 유클리드의 언급 등으로 보았을 때, 서양에서는 이를 반대로 해석한다. [math(5×3=15)]를 [math(5+5+5=15)]로 보지 않고 [math(3+3+3+3+3=15)]로 본다는 것. 사실 이러한 정의가 맞는지에 대해서는 서양에서도 논란이 많은 문제라고 한다. Presh Talwalker의 영상. [7] 참고로 답은 0.636이다. 0.12를 다섯번 더하면 0.60, 즉 0.6이 되지만, 0.12를 0.1번 더하면(?) 0.012가 된다. 마찬가지로 0.3번 더하면(?) 0.036이 되고, 0.6과 0.036을 합친 값이 0.636. 간단히 말해 12×53=636를 구한 다음, 소수점 이하 자릿수를 모두 더해서 찍어주면 된다. 다시 말해, 아예 유한소수를 분모가 10의 거듭제곱인 분수로 바꾼 후 분자는 분자끼리, 분모는 분모끼리 곱한 뒤 다시 소수로 변환하면 된다. [8] 직사각형, 직육면체 [9] 사원수, 벡터, 행렬 등은 제외 [10] 팔원수 등은 제외 [11] 가장 일반적인 예시가 덧셈 및 뺄셈에 대한 곱셈의 분배법칙으로, 두 수의 합/차에 어떤 수를 곱한 값과 두 수 각각에 그 수를 곱한 값의 합/차가 같다는 것이다. [12] 행렬은 항등원이 하나 더 존재한다. 자세한 것은 행렬 참조. [13] ÷기호 자체가 기본 키보드로는 칠 수가 없는 문자이기도 하다. [14] 0의 역원 1/0= 무한대라는 오해가 있는데, 무한대는 실수 집합에 포함되지 않으므로 틀린 말이다. 무한대를 포함하는 확장된 실수 및 극한에서는 [math(\frac{1}{\infty}=0)]이라고 정의한다. 하지만 [math(0 \cdot \infty)] 또는 [math(\frac{1}{0})]의 값은 여전히 정의되지 않는다. 약간 어거지를 부려서 [math(\displaystyle \lim_{x \rightarrow 0^{+}}{x} = 0)]의 역원이 [math(\displaystyle \lim_{x \rightarrow 0^{+}}{\frac{1}{x}} = \infty)]라고 하면 말은 되겠지만 만약 [math(\displaystyle \lim_{x \rightarrow 0^{-}}{x} = 0)]의 역원은 [math(\displaystyle \lim_{x \rightarrow 0^{-}}{\frac{1}{x}} = -\infty)]이므로 애당초 [math(\displaystyle \lim_{x \rightarrow 0^{+}}\frac{1}{x})]하고 [math(\displaystyle \lim_{x \rightarrow 0^{-}}\frac{1}{x})]의 극한값이 달라서 [math(\displaystyle\frac{1}{0})]은 정의되지 않는다. 다만 Wheel Theory에서는 가능하긴 한데 여기선 애초에 무한대의 개념이 좀 다르다고 봐야 한다. [15] 1937~2008. 놀라운 것은 그가 카라추바 알고리즘을 발견할 당시 불과 23세의 학생이었다는 것이며, 그것도 일주일만에 찾아냈다는 것이다. [16] 가장 대표적인 Toom-3 알고리즘의 경우 [17] 여기서 [math(\log^*)]는 반복 로그 [18] 이 영상의 4분 부분부터 참고 [19] 관측 가능한 우주에 존재하는 모든 원자들의 개수([math(\approx2^{272.3981037808})])와 얼추 비슷하다. 참고로 256비트 수의 곱셈은 64비트 아키텍처에서 지원하지 않기 때문에 직접 구현해야 한다.

분류