Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

전공공부

[BOJ_9421] 소수 상근수 본문

Study/Problem Solving

[BOJ_9421] 소수 상근수

monitor 2023. 11. 30. 23:16

설명


N 부터 이하의 숫자중 소수 먼저 뽑아서 리스트에 넣고 상근수 만드는 구현 함수를 통해서 돌리고 1이 되면 그때의 상근수를 출력 그리고, 반복적인 숫자가 상근수 만드는 과정에서 나오면 이것은 반복해서 끝나지 않기 때문에 Map으로 중간 돌아가는 과정의 수를 저장하면서 상근수인지 판단

 

코드


 

package Math;
import java.util.*;

public class BOJ_9421 {
    static Map<Integer,Integer> map;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        List<Integer> list = getPrime(N);
        makeNum(list);
    }

    private static void makeNum(List<Integer> list) {
        for(int i = 0; i < list.size(); i++) {
            map = new HashMap<>();
            String str = String.valueOf(list.get(i));
            int num = 0;
            while(true) {
                num = 0;
                for (char c : str.toCharArray()) {
                    int n = c - '0';
                    if (n != 0) {
                        n = (int) Math.pow(n, 2);
                    }
                    num += n;
                }
                str = String.valueOf(num);
                map.put(num, map.getOrDefault(num, 0) + 1);
                if (map.get(num) > 1) {
                    break;
                }
                if (num == 1) {
                    System.out.println(list.get(i));
                    break;
                }
            }
        }
    }
    private static List<Integer> getPrime(int n) {

        List<Integer> list = new ArrayList<>();

        boolean check = false;
        for(int i = 2; i <= n; i++){
            check = false;
            for(int j = 2; j*j <= i; j++){
                if(i != j && i % j == 0){
                    check = true;
                    break;
                }
            }
            if(!check){
                list.add(i);
            }
        }
        return list;
    }
}
 

9421번: 소수상근수

양의 정수 n의 각 자리수의 제곱의 합을 계산한다. 그렇게 해서 나온 합도 각 자리수의 제곱의 합을 계산한다. 이렇게 반복해서 1이 나온다면, n을 상근수라고 한다. 700은 상근수이다. 72 + 02 + 02 =

www.acmicpc.net

'Study > Problem Solving' 카테고리의 다른 글

[BOJ_1456] 거의 소수  (2) 2023.12.02
[BOJ_2824] 최대공약수  (1) 2023.12.01
[BOJ_2168] 타일 위의 대각선  (1) 2023.11.29
[BOJ_2553] 마지막 팩토리얼 수  (0) 2023.11.28
[BOJ_21312] 홀짝 칵테일  (0) 2023.11.27