본문 바로가기

Algorithm/Math

(11)
[C++] 백준 1978번 : 소수 찾기 (S4) #문제 www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net #풀이 & 학습한 내용 어떤 수 N이 소수인지 판정하기 위해 2부터 N-1까지의 수에 대해 N이 나누어 떨어지는지 살펴본다. 만약, 하나라도 나누어 떨어지는 수가 있다면 N은 소수가 아니다. 이때, 2부터 루트 N까지의 수에 대해서만 관찰해도 됨을 기억하자. 즉, 아래 소스코드의 15행은 for (int i=2; i*i> N; int sum = 0; int num; while (N--) { cin >> num; bool isit = true; for (int i = 2; i
[C++] 백준 1934번 : 최소공배수 (S5) #문제 www.acmicpc.net/problem/1934 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net #풀이 & 학습한 내용 유클리드 호제법으로 최대공약수(GCD)를 구하고 이를 통해 (a*b)/GCD로 최소공배수를 구해야하는 문제이다. supremo7.tistory.com/113에서 푼 방식으로 최소공배수(LCM)을 구하면 worst case에서 실행횟수가 약 1000*45000*45000로 약 2,000,000,000,000이다. 1억(1초)이 100,000,000이므로 불가능하다..
[C++] 백준 2609번 : 최대공약수와 최소공배수 (S5) #문제 www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net #풀이 & 학습한 내용 최대공약수는 1부터 두 수 중 작은 수(b)까지 for문으로 살피면서 두 수 모두에 나누어 떨어지면 GCD값을 갱신시켜준다. 최소공배수는 두 수 중 작은 수(b)부터 두 수의 곱(b*a)까지 for문으로 살피면서 두 수 모두에 의해 나누어 떨어지면 LCD값을 결정하고 for문을 탈출한다. cf) 최대공약수는 유클리드 호제법을 통해서 구할 수도 있다. GCD(a, b)=GCD(b, a% b)를 이용하고, a% b가 0일 때 그때 b가 최대공약수이다...