题目:
解析:
两个思路,一个是挨个遍历,挨个判断,另一个是 因为在 [ 0 , 10 ) 中,质数仅占 { 2 , 3 , 5 , 7 } 四位,如果仅判断这四个数字组合成的数是否是质数的话,性能能否有进一步的提升。
代码:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static final int N = 20210605;
public static void main(String[] args) {
boolean[] marked = new boolean[N + 1];
List<Integer> primes = new ArrayList();
marked[0] = marked[1] = true;
int ans = 0;
for (int i = 2; i <= N; i++) {
if (!marked[i]) {
primes.add(i);
boolean flag = false;
for (int k = i; k > 0; k /= 10)
if (flag = marked[k % 10]) break;
if (!flag) ans++;
}
for (int p : primes) {
if (p * i > N) break;
marked[p * i] = true;
if (i % p == 0) break;
}
}
System.out.println(ans);
}
}