목록정수론 (5)
홍우진의 개발 일기장
문제 링크https://www.acmicpc.net/problem/1929 풀이 코드n,m = map(int,input().split())for i in range(n,m+1): #n~m 사이의 수를 모두 검사 if i == 1: #1이라면 그냥 넘어감 continue for j in range(2,int(i**0.5)+1): #2부터 i의 제곱근까지의 수로 나눠지는지 if i % j == 0: #나눠진다면 소수가 아님 break else: print(i) #안나눠진다면 소수코드 해석"에라토스테네스의 체" 가 핵심 포인트다.즉 구하려는 수 x가 2부터 x의 제곱근까지의 수로 나눠지는지만 확인하면 소수인지 아닌지 판별이 가..
문제 링크 https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 풀이 코드 n = int(input()) a = list(map(int, input().split())) print(max(a) * min(a)) 코드 해석 진짜 약수를 리스트로 받은 뒤 min 값과 max 값을 곱하여 n을 찾는다.
문제 링크 https://www.acmicpc.net/problem/2485 2485번: 가로수 첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3 ≤ N ≤ 100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가 www.acmicpc.net 풀이 코드 import sys from math import gcd N = int(sys.stdin.readline()) a = int(sys.stdin.readline()) arr = [] for i in range(N-1): num = int(sys.stdin.readline()) arr.append(num - a) a = num g = arr[0] for j in range..
문제 링크 https://www.acmicpc.net/problem/5347 5347번: LCM 첫째 줄에 테스트 케이스의 개수 n이 주어진다. 다음 n개 줄에는 a와 b가 주어진다. a와 b사이에는 공백이 하나 이상 있다. 두 수는 백만보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 코드 from math import gcd def lcm(x,y): return x*y // gcd(x,y) n = int(input()) for _ in range(n): a,b = map(int,input().split()) print(lcm(a,b)) 코드 해석 math의 gcd 함수를 사용하고 유클리드 호재법을 적용 하여 최대공약수를 구한다.
문제 링크 https://www.acmicpc.net/problem/13241 풀이 코드 a, b = map(int, input().split()) def gcd(a, b): while b: mod = b b = a % b a = mod return a print(a*b//gcd(a, b)) 코드 해석 a와 b의 최소공배수는 a x b / gcd(a,b) 이다. gcd를 구하면 된다.