= 생각 = n! 를 구성하는 2 <= k <= n 인 k의 인수를 구하는 방법과, k가 소수인지 아닌지 판별하는 방법에 따라 속도가 결정된다. 기본적으로 n만큼 크기의 배열 fac을 잡고 해당 인덱스의 인수의 개수를 넣는다. (ex.fac[8] 이면 8에 해당하는 인수의 개수 즉 3이 들어간다.) 이렇게 배열을 잡은 이유는 예를들어 나중에 16의 인수의 개수를 구한다면 16 = 8x2 이므로 fac[16] = fac[8]+1 = 4가 된다. fac[8]은 미리 구해져 배열에 저장되어있던 값 이므로 계산이 바로 나온다. 하지만 k가 소수라면 이러한 방법이 통하지 않는다. 소수는 나름의 판별원칙에 따라 판단. 소수판별에는 수학공식이 이용되는데 이것은 생략 ^^ = 소스 = {{{~cpp import java.util.*; import java.math.*; public class FactorialFactors2 { final int CASE_N = 1000000; //테스트할 케이스 수 int fac[] = new int[CASE_N+1]; //인수저장배열 ArrayList prime = new ArrayList(); boolean isPrime(int num){ for(int k=0;k