Buggy python submission (verdict: Time Limit Exceeded):

# Beginners Contest (C)

import sys
sys.setrecursionlimit(10**6)

# 約数に分解
def calc_divisor(n):
	div_dic = {}
	k = 2
	while True:
		# 約数の場合
		if n%k == 0:
			if k not in div_dic: div_dic[k] = 0
			div_dic[k] += 1
			n = n//k
			if n == 1: break
		else:
			k += 1
	return div_dic

# 入力取得
a,b = [int(e) for e in input().split(" ")]

# 約数に分解
div_dic_a = calc_divisor(a)
div_dic_b = calc_divisor(b)

# 約数の和集合を計算
div_ls = list(div_dic_a) + list(div_dic_b)
div_ls = list({k: 1 for k in div_ls})
div_dic = {k:(div_dic_a[k]
	if div_dic_a.get(k,0) > div_dic_b.get(k,0)
	else div_dic_b[k]) for k in div_ls}
# print(div_dic)

# 最小公倍数を計算
ans = 1
for k in div_dic:
	ans *= k ** div_dic[k]

print(ans)


Fixed submission:

# Beginners Contest (C)

import sys

# 約数に分解
def calc_divisor(n):
	div_dic = {}
	if n == 1: return div_dic
	k = 2
	while True:
		# 約数の場合
		if n%k == 0:
			if k not in div_dic: div_dic[k] = 0
			div_dic[k] += 1
			n = n//k
			if n == 1: break
		else:
			k += 1
	return div_dic

# 入力取得
a,b = [int(e) for e in input().split(" ")]

# 約数に分解
div_dic_a = calc_divisor(a)
div_dic_b = calc_divisor(b)

# 約数の和集合を計算
div_ls = list(div_dic_a) + list(div_dic_b)
div_ls = list({k: 1 for k in div_ls})
div_dic = {k:(div_dic_a[k]
	if div_dic_a.get(k,0) > div_dic_b.get(k,0)
	else div_dic_b[k]) for k in div_ls}
# print(div_dic)

# 最小公倍数を計算
ans = 1
for k in div_dic:
	ans *= k ** div_dic[k]

print(ans)

Buggy python submission (verdict: Runtime Error):

# Beginners Contest (C)

import sys
sys.setrecursionlimit(10**6)

# 約数に分解
def calc_divisor(n, div_dic = None):
	if n == 1: return div_dic
	# 初回呼び出し時の初期化
	if div_dic is None: div_dic = {}
	for i in range(n):
		# 1を除く
		if (i+1) == 1: continue
		# 約数の場合
		if n%(i+1) == 0:
			if (i+1) not in div_dic: div_dic[i+1] = 0
			div_dic[i+1] += 1
			return calc_divisor(n//(i+1), div_dic)

# 入力取得
a,b = [int(e) for e in input().split(" ")]

# 約数に分解
div_dic_a = calc_divisor(a)
div_dic_b = calc_divisor(b)

# 約数の和集合を計算
div_ls = list(div_dic_a) + list(div_dic_b)
div_ls = list({k: 1 for k in div_ls})
div_dic = {k:div_dic_a[k] if div_dic_a.get(k,0) > div_dic_b.get(k,0) else div_dic_b[k] for k in div_ls}
# print(div_dic)

# 最小公約数を計算
ans = 1
for k in div_dic:
	ans *= k ** div_dic[k]

print(ans)


Fixed submission:

# Beginners Contest (C)

import sys

# 約数に分解
def calc_divisor(n):
	div_dic = {}
	if n == 1: return div_dic
	k = 2
	while True:
		# 約数の場合
		if n%k == 0:
			if k not in div_dic: div_dic[k] = 0
			div_dic[k] += 1
			n = n//k
			if n == 1: break
		else:
			k += 1
	return div_dic

# 入力取得
a,b = [int(e) for e in input().split(" ")]

# 約数に分解
div_dic_a = calc_divisor(a)
div_dic_b = calc_divisor(b)

# 約数の和集合を計算
div_ls = list(div_dic_a) + list(div_dic_b)
div_ls = list({k: 1 for k in div_ls})
div_dic = {k:(div_dic_a[k]
	if div_dic_a.get(k,0) > div_dic_b.get(k,0)
	else div_dic_b[k]) for k in div_ls}
# print(div_dic)

# 最小公倍数を計算
ans = 1
for k in div_dic:
	ans *= k ** div_dic[k]

print(ans)

Buggy python submission (verdict: Runtime Error):

# Beginners Contest (C)

import sys

# 約数に分解
def calc_divisor(n, div_dic = None):
	if n == 1: return div_dic
	# 初回呼び出し時の初期化
	if div_dic is None: div_dic = {}
	for i in range(n):
		# 1を除く
		if (i+1) == 1: continue
		# 約数の場合
		if n%(i+1) == 0:
			if (i+1) not in div_dic: div_dic[i+1] = 0
			div_dic[i+1] += 1
			return calc_divisor(n//(i+1), div_dic)

# 入力取得
a,b = [int(e) for e in input().split(" ")]

# 約数に分解
div_dic_a = calc_divisor(a)
div_dic_b = calc_divisor(b)

# 約数の和集合を計算
div_ls = list(div_dic_a) + list(div_dic_b)
div_ls = list({k: 1 for k in div_ls})
div_dic = {k:div_dic_a[k] if div_dic_a.get(k,0) > div_dic_b.get(k,0) else div_dic_b[k] for k in div_ls}
# print(div_dic)

# 最小公約数を計算
ans = 1
for k in div_dic:
	ans *= k ** div_dic[k]

print(ans)


Fixed submission:

# Beginners Contest (C)

import sys

# 約数に分解
def calc_divisor(n):
	div_dic = {}
	if n == 1: return div_dic
	k = 2
	while True:
		# 約数の場合
		if n%k == 0:
			if k not in div_dic: div_dic[k] = 0
			div_dic[k] += 1
			n = n//k
			if n == 1: break
		else:
			k += 1
	return div_dic

# 入力取得
a,b = [int(e) for e in input().split(" ")]

# 約数に分解
div_dic_a = calc_divisor(a)
div_dic_b = calc_divisor(b)

# 約数の和集合を計算
div_ls = list(div_dic_a) + list(div_dic_b)
div_ls = list({k: 1 for k in div_ls})
div_dic = {k:(div_dic_a[k]
	if div_dic_a.get(k,0) > div_dic_b.get(k,0)
	else div_dic_b[k]) for k in div_ls}
# print(div_dic)

# 最小公倍数を計算
ans = 1
for k in div_dic:
	ans *= k ** div_dic[k]

print(ans)