상세 컨텐츠

본문 제목

PS101 - 정수론(1)

PS101

by Gravekper 2021. 3. 20. 08:20

본문

www.youtube.com/watch?v=XzwXF3rcyR4

배수와 약수

양의 정수 a와 b가 있을 때, a를 b로 나눈 나머지가 0이면 자연수 a는 b의 배수이고 b는 a의 약수이다.

a % b == 0

최대공약수: 유클리드 알고리즘

유클리드 알고리즘을 사용하면 a와 b의 최대공약수를 구할 수 있다.

/*
유클리드 알고리즘
===============
정수 a,b의 최대공약수를 gcd(a,b)라 한다.
gcd(a,b)=gcd(b,a%b)이다. 따라서 작은 쪽 수가 0이 될 때까지 (a,b)=(b,a%b)를 반복하면 a,b의 최대공약수를 구할 수 있다.
*/

//반복문을 사용한 구현
int gcd(int a, int b) {
	if (a < b) swap(a, b);

	while (b > 0) {
		a = a % b;
		swap(a, b);
	}
	return a;
}

//재귀 호출을 사용한 구현
int gcd(int a, int b) {
	if (b == 0) return a;
	return gcd(b, a % b);
}

a와 b의 최대공약수를 gcd(a,b)라 할 때 a와 b의 최소공배수는 a*b/gcd(a,b)이다.

약수 찾기

양의 정수 n의 약수를 모두 찾는 가장 간단한 방법은 1부터 n까지 모두 나눠보는 것이다.

정수 n은 약수 두 개의 곱으로 나타낼 수 있고, 이 때 두 약수 중 작은 쪽의 크기는 항상 n의 제곱근보다 작거나 같다. 따라서 1부터 n의 제곱근까지만 확인해도 모든 약수를 찾을 수 있다.

약수가 1과 자신 뿐이면 소수이다.

bool isprime(int n) {
    if (n == 1) return false;

    for (int i = 2; (i * i) <= n; i++) {
        if (n % i == 0) return false;
    }

    return true;
}

연습문제

✰✰

✰✰✰

'PS101' 카테고리의 다른 글

PS101 - 프로토타입 소개  (0) 2021.03.20

관련글 더보기

댓글 영역