判断一个数能否同时被3和5整除

GitHub跳转原题关系图返回列表

“同时被 3 和 5 整除”折叠成一次取余:3 与 5 互质,等价于 n % 15 == 0,命中输出 YES,否则 NO。

OJ: roj

题目 ID: 1046

难度:入门

标签:入门数学python

创建: 2026-09-29 16:10

更新: 2026-10-04 23:23

题目描述

输入一个整数 nn(−1,000,000<n<1,000,000-1{,}000{,}000 < n < 1{,}000{,}000,含负数与 00),判断它能否同时被 3 和 5 整除:能则输出 YES,否则输出 NO。

输入:一行一个整数 nn。

输出:一行 YES 或 NO。

样例输入:

text
15

样例输出:

text
YES

思路

3 与 5 互质,“同时被 3 和 5 整除"等价于"被 lcm⁡(3,5)=15\operatorname{lcm}(3,5)=15 整除”,所以只需一次取余 n % 15 == 0。注意条件是"同时",不能写成 ||;负数与 00 不必特判,00 也是 15 的倍数。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 16:10
# update_at: 2026-10-04 12:47

import sys

BOTH = 15  # 3 与 5 的最小公倍数:被 3 整除且被 5 整除 ⇔ 被 15 整除


def solve() -> None:
    data = iter(map(int, sys.stdin.buffer.read().split()))
    n = next(data)  # 待判定的整数,可能为负数或 0
    # n 是 15 的倍数 ⇔ n % 3 == 0 且 n % 5 == 0;Python 负数取余结果仍非负,判定不受符号影响
    divisible = n % BOTH == 0
    print("YES" if divisible else "NO")


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-04 23:23
 * update_at: 2026-10-04 23:23
 */

// 判断整数 n 能否同时被 3 和 5 整除:3 与 5 互质,等价于判断 n 能否被 lcm(3,5)=15 整除。
#include <cstdio>

typedef long long ll;

ll n; // 待判定的整数,范围 (-1000000, 1000000),含负数与 0

int main() {
    scanf("%lld", &n);
    if (n % 15 == 0) printf("YES\n"); // 负数取余为 0 时同样表示整除,0 也是 15 的倍数
    else             printf("NO\n");
    return 0;
}