[语言月赛202303] Factorial B 题解

· · 题解

[语言月赛202303] Factorial B 题解

Source & Knowledge

2023 年 3 月语言月赛,由洛谷网校入门计划/基础计划提供。

本题考察分支结构和简单数学推导。

文字题解

题目大意

给定整数 n,判定 n! = 1 \times 2 \times 3 \times \dots \times n 是不是 12 的倍数。

### 解析 容易计算得出 $0! = 1$,$1! = 1$,$2! = 2$,$3! = 6$ 都不是 $12$ 的倍数。 而 $4! = 1 \times 2 \times 3 \times 4 = 1 \times 2 \times \color{red}{(3 \times 4)}$ $= 1 \times 2 \times \color{red}{12}$。 所以 $4!$ 是 $12$ 的倍数。 当 $n > 4$ 时,$n! = 1 \times 2 \times 3 \times 4 \times \dots \times n = 4! \times 5 \times 6 \times \dots \times n$,含有因子 $4$ 和 $3$,所以 $n!$ 含有因子 $4 \times 3 = 12$,所以 $n!$ 也是 $12$ 的倍数。 综上:当 $n \leq 3$ 时,$n!$ 不是 $12$ 的倍数;$n \geq 4$ 时,$n!$ 是 $12$ 的倍数。 ### 读入 首先定义一个变量 $n$。注意到输入规模是 $0 \leq n \leq 10^{18}$,而 `int` 能存储的范围只有大约 $20$ 亿($2 \times 10^9$),不能满足存储要求,而 `long long` 的存储上界大约是 $9 \times 10^{18}$,可以满足存储要求。因此要用 `long long n` 来声明变量 $n$。 ```cpp long long n; cin >> n; ``` ### 判定和输出 可以使用 `if` 语句完成选择结构,其语法为 `if(A) B else C`,如果表达式 `A` 的值为真则执行语句(块)`B`,否则执行语句(块)`C`。 判断完后,对应输出 `Yes` 或 `No` 即可,注意大小写。 ```cpp if (n <= 3) { cout << "No\n"; } else { cout << "Yes\n"; } ``` ## 视频题解 **完整代码请在视频中观看**。 ![](bilibili:BV1Vv4y1L7Vc?page=1)