두 개의 숫자 x와 y가 주어졌을 때, 두 수의 제곱(정사각형의 면적) 차이가 소수인지 확인해야 합니다.
예를 들어 x = 7, y = 6이라고 가정해 보겠습니다. 두 정사각형의 면적은 각각 49와 36이며, 그 차이는 49 − 36 = 13입니다. 13은 소수이므로 결과는 True가 됩니다.
접근 방법
이 문제는 인수분해 공식을 활용하면 매우 효율적으로 해결할 수 있습니다. 두 정사각형 면적의 차이는 다음과 같이 분해됩니다.
x² − y² = (x + y)(x − y)
소수는 1과 자기 자신 외에 약수를 가질 수 없습니다. 따라서 위 곱셈 결과가 소수가 되려면 두 인수 중 하나가 반드시 1이어야 하고, 나머지 하나는 소수여야 합니다. 즉, 다음 조건을 만족해야 합니다.
- (x + y)가 소수이면서
- (x − y)가 1이어야 합니다.
두 조건이 모두 참이면 True를 반환하고, 그렇지 않으면 False를 반환하면 됩니다.
예제 코드
def is_prime(num):
if num <= 1:
return False
if num <= 3:
return True
if num % 2 == 0 or num % 3 == 0:
return False
i = 5
while i * i <= num:
if num % i == 0 or num % (i + 2) == 0:
return False
i = i + 6
return True
def solve(x, y):
if is_prime(x + y) and x - y == 1:
return True
else:
return False
x, y = 7, 6
print(solve(x, y))입력
7, 6
출력
True
위 코드에서 is_prime() 함수는 6k ± 1 최적화 기법을 사용해 소수 여부를 빠르게 판별하며, solve() 함수는 앞서 설명한 조건을 검사하여 최종 결과를 반환합니다. 이 방식은 단순히 두 제곱의 차이를 계산한 뒤 일일이 소수를 검사하는 것보다 훨씬 효율적입니다.