匆忙写了一道计算题,直接上代码:
import java.util.Scanner;
public class Main {
public static boolean[] isWP = new boolean[10001]; // 存储是否素数的数组,true表示下标值对应的是素数
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int sum = 0;
int q = 0;
for (int i = 1; i <= n; i++) {
if (is(i)) {
isWP[i] = true;
}
}
for (int i = 2; i <= n; i++) {
if (isQ(i)) {
sum++;
}
}
System.out.println(sum);
}
public static boolean isQ(int q) {
// 判断是否满足 q = p^k
for (int p = 2; p <= q; p++) {
for (int k = 1;; k++) {
int result = (int)Math.pow(p, k);
if (result > q) {
break;
}
if (result == q && isWP[p]) {
return true;
}
}
}
return false;
}
// 判断是否是素数的方法
public static boolean is (int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
一点小收获:
- 用数组存储计算值(因为一个数是否是素数这个是固定的,会起到很好的优化效果);
- 代码整洁性(由于自己写的也比较匆忙,还是不够完美,不过有个原则,重复的内容、计算等最好不要有!);
- 做到以上两点基本上可以满足题的时间要求,还可以在区间上进行优化!