본문 바로가기
Algorithm(코딩테스트)/코딩테스트 | 기초 개념 시리즈

[JAVA] 약수와 소수 찾기

by 카랑현석 2024. 11. 26.

1. 약수 찾기

약수란 어떤 수로 나누었을 때 나누어 떨어지도록 하는 수이다.

예를 들면 8의 약수는 1, 2, 4, 8 이다.

 

n의 약수들을 어떻게 찾을까?

8 % (1~n) 을 했을 때 0이 나오면 약수이다.

 

8 % 1 == 0 -> 1은 8의 약수

8 % 2 == 0 -> 2는 8의 약수

8 % 3 != 0

8 % 4 == 0 -> 4는 8의 약수

8 % 5 != 0

8 % 6 != 0

8 % 7 != 0

8 % 8 == 0 -> 8은 8의 약수

 

이 로직을 코드로 옮기면 된다.

public class PracticeMeasure {
	public static void main(String[] args) {
		int findMeasure = 8; // 8의 약수를 찾는다.
		isMeasure(findMeasure);
	}
	
	// 약수를 찾는 알고리즘
	static void isMeasure(int checkNum) {
        for(int i=1; i<=checkNum; i++) {
            if(checkNum % i == 0) {
            	System.out.print(String.format("%d ", i));
            }
        }
	}
}

 

코드트리_완전수 https://www.codetree.ai/missions/4/problems/perfect-number/description #약수, #조건문+반복문

 

2. 소수 찾기

소수란 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수이다. 

예를 들면, 7의 약수는 1,7 이므로 7은 소수이다.

8의 약수는 1,2,4,8 이므로 1과 자기 자신인 8을 제외하고도 2,4가 있으므로 8은 소수가 아니다.

 

그럼 n이 약수인지 아닌지 어떻게 판별할까?

2부터 n/2 까지의 수를 나눴을 때 모두 나머지가 0이 아니어야 한다.

 

예를 들어 9가 소수인지 검사를 해보자.

9/2 는 4이므로 2부터 4까지 나누었을 때 모두 나머지가 0이 아니어야 소수이다.

 

9 % 2 != 0 (통과)

9 % 3 == 0 (소수가 아니다.)

9 % 4 != 0 (통과)

 

9 % 3 에서 나누어 떨어지므로 9는 소수가 아니다.

 

이 로직을 코드로 옮기면 된다.

public class PraticePrime {
	public static void main(String[] args) {
		int checkPrime = 9; // 9가 소수인지 체크한다.
		if(isPrime(checkPrime) == true) {
			System.out.println("9는 소수입니다.");
		} else {
			System.out.println("9는 소수가 아닙니다.");
		}
    }

    // 소수 판별 알고리즘
    // 1) 2 ~ checkNum/2 의 수까지 나눴을 때 나머지가 하나라도 0인 것이 있으면 소수가 아니다. 
    public static boolean isPrime(int checkNum) {
        for(int i=2; i<=checkNum/2; i++) {
            if(checkNum%i == 0) return false;
        }

        return true;
    }
}

 

코드트리_소수 구하기 https://www.codetree.ai/missions/4/problems/get-prime/description #소수, #조건문+반복문