예전에 Java로 풀었던 문제다.
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 31 32 33 34 35 36 | public class Problem003 { public static void main(String[] args) { long num = 600851475143L; int[] primeFactors = new int[100]; int idx = 0; int i = 2; while((num / i != 1) || (num%i != 0)) { if(num%i == 0) { primeFactors[idx++] = i; num /= i; } else { i++; } if () { primeFactors[idx] = i; break; } } primeFactors[idx] = i; for(int j = 0; j < primeFactors.length; ++j) { if((primeFactors[j] != 0) && (primeFactors[j + 1] == 0)) { idx = j; break; } } System.out.println("The largest prime factor: " + primeFactors[idx]); } } | cs |
18행의 조건문에 조건이 없다.
뭘 실험해본다고 코드 일부를 수정하는 과정에서 지워졌는데 그걸 실수로 저장한 모양이다.
대체 왜....
그리고 코드도 너무 복잡한 것 같아서 C로 다시 풀었다.
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 31 32 33 34 | #include <stdio.h> int run(); int main() { return run(); } int run() { long long number = 600851475143; long long pf = 3; long long max = -1; while (number > 1) { if (number % pf == 0) { number /= pf; if (max < pf) { max = pf; } } else { ++pf; } } printf("%lld\n", max); return 0; } | cs |
제수를 늘리며 나누어지는지 확인한다.
단, 소인수는 중복될 수 있으므로 나누어지지 않을 때만 제수의 값을 늘린다.
모든 소인수로 나눠지면 number 는 1 이 되므로 반복문의 탈출 조건은 number > 1 이 된다.
'Programming > Solutions' 카테고리의 다른 글
[BAEKJOON] 11721번 (0) | 2019.03.20 |
---|---|
[Project Euler] Problem 004 (0) | 2019.03.20 |
[BAEKJOON] 2839번: 설탕 배달 (0) | 2019.03.19 |
[BAEKJOON] 1002번: 터렛 (0) | 2019.03.19 |
[Project Euler] Problem 002 (0) | 2019.03.18 |