SRM 388 Level2 1000
http://www.topcoder.com/stat?c=problem_statement&pm=8565&rd=11122
给定N和K,返回N中最大素数因子小于等于K的数字个数

解法与素数的计算流程相通
自下向上,只是对每个数多记录一次其最大素数因子
 1 mport java.util. * ;
 2 import  java.util.regex. * ;
 3 import  java.text. * ;
 4 import  java.math. * ;
 5 import  java.awt.geom. * ;
 6
 7 public   class  SmoothNumbersHard
 8 {
 9    public int countSmoothNumbers(int N, int k)
10    {
11        boolean[] prime = new boolean[N+1];
12        int[] divider = new int[N+1];
13        Arrays.fill(prime,true);
14        Arrays.fill(divider, 1);
15        for(int i = 2 ; i <= N; ++ i){
16            if(prime[i]){
17                divider[i] = i;
18                for(int j = 2; i * j <= N; ++ j){
19                    prime[i*j] = false;
20                    divider[i*j] = i;
21                }

22            }

23        }

24        int ans = 0;
25        for(int i = 1 ; i <= N ; ++ i){
26            if(divider[i] <= k)
27                ans++;
28        }

29        return ans;
30    }

31