日期:2025年9月25日
ZeroJudge 題目連結:e484. 我是優質學生
解題想法
這題要判斷輸入的數字是否為 2 到 10000 之間的質數,由於輸入只有一行,不要建質數表,直接判斷這個數是否為質數就好。
Python 程式碼
使用時間約為 18 ms,記憶體約為 3.3 MB,通過測試。
def is_prime(n): # 判斷是否為質數
if n <= 1: return False # 特例,小於等於1,回傳 False
if n == 2 or n == 3: return True # 特例,等於 2 或 3,回傳 True
if n%2 == 0 or n%3 == 0: return False # 特例,可以被 2 或 3 整除,回傳 False
for i in range(5, int(n**0.5)+1, 6): # 依序檢查 5 ~ sqrt(n),每次加 6
if n%i == 0 or n%(i+2) == 0: # 如果可以被 i 或 i+2 整除,回傳 Fasle
return False
return True # 最後回傳 True
print("yes" if is_prime(int(input())) else "no")
C++ 程式碼
使用時間約為 2 ms,記憶體約為 104 kB,通過測試。
#include <cstdio>
using namespace std;
bool is_prime(int n) { // 判斷是否為質數
if (n <= 1) return false; // 特例,小於等於1,回傳 False
if (n == 2 || n == 3) return true; // 特例,等於 2 或 3,回傳 True
if (n%2 == 0 || n%3 == 0) return false; // 特例,可以被 2 或 3 整除,回傳 False
for(int i=5; i*i <= n; i += 6) { // 依序檢查 5 ~ sqrt(n),每次加 6
if (n%i == 0 || n%(i+2) == 0) return false; // 如果可以被 i 或 i+2 整除,回傳 Fasle
}
return true; // 最後回傳 True
}
int main() {
int n; scanf("%d", &n);
if (is_prime(n)) printf("yes\n");
else printf("no\n");
return 0;
}
沒有留言:
張貼留言