2021-03-08
문제
어떤 정수 A가 있으면 그 숫자를 A = a1 * a2 * a3 * a4 ... * an으로 했을 때 A' = a1 + a2 + a3 ... + an이 성립하면 "A는 A'으로 변할 수 있다"라고 한다. (ai는 정수) 만약 A'이 A''으로 변할 수 있으면 "A는 A''으로 변할 수 있다"라고 한다.
이때 A와 B가 주어지면 A는 B로 변할 수 있는지 판별하시오.
입력
첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 100)이 주어진다. 테스트 케이스마다 두 정수 A, B(-231 ≤ A, B ≤ 231-1)가 주어진다.
출력
각각의 테스트 케이스마다 한 줄에 변할 수 있으면 yes, 아니면 no를 출력한다.
힌트
6 = 2*3, 2+3=5이므로 성립한다.
소스코드
import java.util.Scanner;
public class TemplateA {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int tCase = scan.nextInt();
for(int i = 0; i < tCase; i++) {
int a = scan.nextInt();
int b = scan.nextInt();
int [] arr = new int [a];
int temp = 2;
//소인수 분해를 위해 사용될 변수
int t = 0;
//배열위치지정변수
while(a != 1) {
if(a % temp == 0) {
//a 의 소인수 여부 체크
arr[t] = temp;
//소인수 배열 할당
a = a / temp;
//a 값 소인수로 나누어서 초기화
t++;
//배열위치 하나씩 증가
}else {
temp++;
//소인수 아니면 하나씩 증가
}
}
int sum = 0;
for(int j = 0; j < arr.length; j++) {
if(arr[j] == 0){break;}
sum +=arr[j];
}
//소인수값 sum에 모두 더해줌
System.out.println(sum);
if(sum == b) {
System.out.println("yes");
}else {
System.out.println("no");
}
//sum과 b가 같은지 체크
}
}
}
출처링크 : www.acmicpc.net/problem/1402