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
