置頂

我的 VPython 教學文件 (HackMD 版本)

VPython 教學文件目錄 安裝及測試 基本語法 等速度直線運動 自由落下 終端速度 水平抛射 使用For迴圈計算水平抛射資料 斜向抛射 圓周運動 簡諧運動 單擺 木塊彈簧系統分離 重力及簡諧 行星運動 相疊木塊 雙重簡諧運動 一維彈性碰撞 ...

熱門文章

2026年4月25日 星期六

ZeroJudge 解題筆記:d186. 11461 - Square Numbers

作者:王一哲
日期:2026年4月25日


ZeroJudge 題目連結:d186. 11461 - Square Numbers

解題想法


先將 $a$ 開根號並向上取整,計算範圍內平方數開根根號的最小值 $low$,再對 $b$ 開根號並向下取整,計算範圍內平方數開根根號的最大值 $high$,答案就是 $high - low + 1$。

Python 程式碼


使用時間約為 7 ms,記憶體約為 8.6 MB,通過測試。
def solve():
    import sys, math
    
    result = []
    data = sys.stdin.read().split()
    ptr = 0
    while ptr < len(data):
        a, b = map(int, data[ptr:ptr+2])
        ptr += 2
        if a == 0 and b == 0: break
        low = math.ceil(math.sqrt(a))
        high = math.floor(math.sqrt(b))
        result.append(f"{high - low + 1:d}\n")
    sys.stdout.write("".join(result))

if __name__ == "__main__":
    solve()


C++ 程式碼


使用時間約為 0 ms,記憶體約為 1.9 MB,通過測試。
#include <cstdio>
#include <cmath>

int main() {
    int a, b;
    while(scanf("%d %d", &a, &b) != EOF) {
        if (a == 0 && b == 0) break;
        int low = (int)ceil(sqrt(a));
        int high = (int)sqrt(b);
        printf("%d\n", high - low + 1);
    }
    return 0;
}


沒有留言:

張貼留言