Wednesday, April 11, 2007
Perl 펄] 최소 공배수 구하기 함수; LCM; Least Common Multiple
최소 공배수는, 최대공약수 계산 함수인 gcd()를 내부적으로 호출하여 사용합니다. 수학에서는 최소공배수를 LCM 이라고 부릅니다. Least Common Multiple 의 약자입니다. 단, 아래 소스에서는 소문자로 lcm 이라는 함수명을 지정했습니다.
함수의 사용법은
lcm(숫자, 숫자)
이고, 두 숫자의 최소 공배수를 반환합니다.
스크립트 파일명: example.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
▶▶ Perl 펄] 최대 공약수 구하기 함수, 유클리드 호제법; GCD, Euclidean Algorithm
최소공배수 계산기 (온라인 버전): ▶▶ 최소공배수 계산기; LCM 구하기 Calc
함수의 사용법은
lcm(숫자, 숫자)
이고, 두 숫자의 최소 공배수를 반환합니다.
최소공배수 계산 예제
스크립트 파일명: example.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#!/usr/bin/perl
use strict; use warnings;
print lcm(4, 6), "\n"; # 12
print lcm(21, 6), "\n"; # 42
print lcm(-5, -4), "\n"; # 20
print lcm(-9, 2), "\n"; # 18
print lcm(0, 0), "\n"; # 0
# 세 숫자의 최소공배수 구하기
print lcm(45, lcm(120, 75)), "\n"; # 1800
# 네 숫자의 최소공배수 구하기
print lcm(112, lcm(113, lcm(114, 119))), "\n"; # 12263664
# 다음과 같이 거대한 숫자가 나오는 경우,
# use bigint; 를 사용하면
# 1.00376006603685e+016 이런 지수 표기법 출력을
# 10037600660368488 이렇게 정수형으로 나오게 할 수 있음
use bigint;
my $x = lcm(51131, lcm(215987, lcm(24, 454452)));
print $x, "\n"; # 출력 결과: 10037600660368488
# 최소 공배수 계산 함수
sub lcm {
my $a = $_[0];
my $b = $_[1];
my $gcd_value = gcd($a, $b);
return 0 if $gcd_value == 0; # 인수가 둘다 0일 때의 에러 처리
return abs( ($a * $b) / $gcd_value );
}
# 최대 공약수 계산 함수; 최소 공배수 계산에 필요함
sub gcd {
my $a = $_[0];
my $b = $_[1];
while ($b != 0) {
my $temp = $a % $b;
$a = $b;
$b = $temp;
}
return abs($a);
}
use strict; use warnings;
print lcm(4, 6), "\n"; # 12
print lcm(21, 6), "\n"; # 42
print lcm(-5, -4), "\n"; # 20
print lcm(-9, 2), "\n"; # 18
print lcm(0, 0), "\n"; # 0
# 세 숫자의 최소공배수 구하기
print lcm(45, lcm(120, 75)), "\n"; # 1800
# 네 숫자의 최소공배수 구하기
print lcm(112, lcm(113, lcm(114, 119))), "\n"; # 12263664
# 다음과 같이 거대한 숫자가 나오는 경우,
# use bigint; 를 사용하면
# 1.00376006603685e+016 이런 지수 표기법 출력을
# 10037600660368488 이렇게 정수형으로 나오게 할 수 있음
use bigint;
my $x = lcm(51131, lcm(215987, lcm(24, 454452)));
print $x, "\n"; # 출력 결과: 10037600660368488
# 최소 공배수 계산 함수
sub lcm {
my $a = $_[0];
my $b = $_[1];
my $gcd_value = gcd($a, $b);
return 0 if $gcd_value == 0; # 인수가 둘다 0일 때의 에러 처리
return abs( ($a * $b) / $gcd_value );
}
# 최대 공약수 계산 함수; 최소 공배수 계산에 필요함
sub gcd {
my $a = $_[0];
my $b = $_[1];
while ($b != 0) {
my $temp = $a % $b;
$a = $b;
$b = $temp;
}
return abs($a);
}
▶▶ Perl 펄] 최대 공약수 구하기 함수, 유클리드 호제법; GCD, Euclidean Algorithm
최소공배수 계산기 (온라인 버전): ▶▶ 최소공배수 계산기; LCM 구하기 Calc
tag: perl
Perl | 펄
<< Home