熱門文章

2025年9月25日 星期四

ZeroJudge 解題筆記:e484. 我是優質學生

作者:王一哲
日期: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;
}


沒有留言:

張貼留言