SRM 388 Level2 1000
http://www.topcoder.com/stat?c=problem_statement&pm=8565&rd=11122
给定N和K,返回N中最大素数因子小于等于K的数字个数
解法与素数的计算流程相通
自下向上,只是对每个数多记录一次其最大素数因子
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
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