Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 두 정사각형 면적의 차이가 소수인지 확인하는 방법

두 개의 숫자 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() 함수는 앞서 설명한 조건을 검사하여 최종 결과를 반환합니다. 이 방식은 단순히 두 제곱의 차이를 계산한 뒤 일일이 소수를 검사하는 것보다 훨씬 효율적입니다.