2370. 分解质因数

1000ms 256MB 简单 循环 简单数学
题目描述
每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数。把一个合数用质因数相乘的形式表示出来,叫做分解质因数。例如:$12 = 2 \times 2 \times 3$,其质因数的个数为 3。 分解质因数的方法是先用这个合数的最小质因数去除,若商是质数则不再除下去;若商是合数则继续用最小质因数去除,直到最后得到的商是一个质数。 例如:合数 18 分解质因数,首先用最小质因数 2 去除,得商 9;继续用最小质因数 3 去除,得商 3(质数),停止分解。因此 18 的质因数为 2、3、3,质因数个数为 3。 现在给定一个正整数 $n$,请计算将其分解质因数后的质因数个数。
输入格式
- 输入一个正整数 $n$ ($1 \le n \le 10^6$)。
输出格式
- 输出一个整数,表示 $n$ 分解质因数后的质因数个数。如果 $n \le 1$,则输出 0。
样例 1
输入 (Input)
18
输出 (Output)
3
- 对于 $100\%$ 的数据:$1 \le n \le 10^6$。 - **算法提示**: 若要对 $n$ 进行质因数分解,无需从 2 循环到 $n$,只需循环到 $\sqrt{n}$ 即可: 1. 设当前试除数为 $i = 2$,当 $i \times i \le n$ 时执行循环。 2. 若 $n$ 能被 $i$ 整除,说明 $i$ 是 $n$ 的一个质因数。我们让计数器加 1,并将 $n$ 除以 $i$(即 $n = n / i$),重复该操作直到 $n$ 不能被 $i$ 整除为止。 3. 然后将 $i$ 递增,继续步骤 2。 4. 循环结束后,若剩下的 $n > 1$,说明此时的 $n$ 也是一个质因数(且它是大于原数平方根的唯一质因数),需要将计数器再加 1。 5. 这种方法的时间复杂度为 $O(\sqrt{n})$,在 $n \le 10^6$ 的情况下,最多只需运行 1000 次循环即可得出结果。
自测终端 stdin → stdout
输入 stdin
CtrlShiftEnter
输出 stdout

                
错误 stderr

                
CtrlEnter提交
自动保存已开启
操作成功
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字