[开学考试]最大平方数

题目

题目描述

给出 \(N\) ,求 \(1\) 到 \(N\) 个数中选出任意个数相乘能组成的最大平方数,由
于此数可能很大,你只需要输出此数除 \(100000007\) 的余数即可。

样例输入

样例输出

样例解释

\(2\times 3 \times 4\times 6=144\)

数据下载

由于各大oj可能没有,故在此提供测试数据

题解

题目就是这么简单,然而考试并没有想到\(QAQ\)
因为是任意个数相乘,我们可以将\(N!\)进行质因数分解
然后因为\(A^2\times B^2=(A\times B)^2\)
我们就可以把所有的2的整数倍次方全部乘入答案里,就是最大的平方数。

而普通的方法分解\(N!\)需要\(O(N\sqrt{N})\)的时间复杂度,我们可以考虑一种新方法。

显然,\(N!\)的每个质因子都不会超过\(N\),我们可以先筛选出\(1-N\)的每个质数\(p\),然后考虑阶乘中一共包含多少个质因子\(p\)

\(N!\)中质因子\(p\)的个数就等于\(1-N\)每个数包含的质因子\(p\)的个数之和。在\(1-N\)中,\(p\)的倍数,即至少包含1个质因子\(p\)的显然有\(\lfloor N/p \rfloor\)个。而\(p^2\)的倍数,即至少包含2个质因子\(p\)的有\(\lfloor N/p^2 \rfloor\)个。不过其中的一个质因子已经在\(\lfloor N/p \rfloor\)中统计过,所以只需要再统计第2个质因子,即累加上\(\lfloor N/p^2 \rfloor\),而不是\(2\times \lfloor N/p^2 \rfloor\)

综上所述,\(N!\)中质因子\(p\)的个数为:

\left\lfloor \frac{N}{P} \right\rfloor+\left\lfloor \frac{N}{P^2} \right\rfloor+\left\lfloor \frac{N}{P^3} \right\rfloor+\dots+\left\lfloor \frac{N}{P^{\lfloor log_p N \rfloor}} \right\rfloor=\sum_{p^k\le N}\left\lfloor \frac{N}{P^k} \right\rfloor

上面的计算只需要\(O(logN)\)的时间
整个过程只需要\(O(NlogN)\)的时间

代码

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇