匆忙寫了一道計(jì)算題,直接上代碼:
import java.util.Scanner;
public class Main {
public static boolean[] isWP = new boolean[10001]; // 存儲是否素?cái)?shù)的數(shù)組,true表示下標(biāo)值對應(yīng)的是素?cái)?shù)
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;
}
// 判斷是否是素?cái)?shù)的方法
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;
}
}
一點(diǎn)小收獲:
- 用數(shù)組存儲計(jì)算值(因?yàn)橐粋€數(shù)是否是素?cái)?shù)這個是固定的,會起到很好的優(yōu)化效果);
- 代碼整潔性(由于自己寫的也比較匆忙,還是不夠完美,不過有個原則,重復(fù)的內(nèi)容、計(jì)算等最好不要有?。?/li>
- 做到以上兩點(diǎn)基本上可以滿足題的時間要求,還可以在區(qū)間上進(jìn)行優(yōu)化!