~cpp
import java.util.*;
import java.math.*;
public class FactorialFactors2 {
final int CASE_N = 1000000; //
int fac[] = new int[CASE_N+1]; //
ArrayList<Integer> prime = new ArrayList<Integer>();
boolean isPrime(int num){
for(int k=0;k<prime.size();k++){
if(num%prime.get(k)==0)
return false;
}
return true;
}
void printResult(){
int total=0;
for(int i=2;i<=CASE_N; i++)
total+=fac[i];
System.out.println(total);
}
void run(){
long time = System.currentTimeMillis();
prime.add(2);
fac[2] = 1;
int sqrt = (int)Math.sqrt(CASE_N);
//n! 고 2 고 3~n까 각각 계.
for(int i=3;i<=CASE_N;i++){
int num = i;
//num 개 구 .
for(int j=2; num!=1;){
if(num%j == 0){
num = num/j;
fac[i]++;
fac[i]+=fac[num];
break;
}
else
j++;
//7 까 .
if (j == 7 && isPrime(num) == true) {
fac[i]++;
if (num <= sqrt) // sqrt .
prime.add(num);
break;
}
}
}
printResult();
System.out.print(System.currentTimeMillis()-time);
}
public static void main(String[] args) {
new FactorialFactors2().run();
}
}