题解 | #质数因子#埃氏筛+最大质因子性质

质数因子

http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607

从i = 2开始遍历的时候,使用如下两个方法对代码进行优化:

一个正整数的质因子,最多只有一个大于其平方根。

证明:假设有超过一个质因子大于其平方根,那么二者相乘一定大于该数。得证。

如果找到一个质因子,那么该质因子的2倍、3倍...都不是质因子。

#include <bits stdc++.h>

using namespace std;

//constexpr long long N = 1e10 + 10;
//bool st[N];
unordered_map<long, bool> st;

inline void solve(long &amp;n)
{
    for (long i = 2; i &lt;= (long)sqrt(n); i++) {
        for (;!st[i] &amp;&amp; n % i == 0;) {
            cout &lt;&lt; i &lt;&lt; ' ';
            n /= i;
            for (long j = i + i; j &lt;= (long)sqrt(n); j += i)
                st[j] = true;
        }
    }
    if (n != 1) cout &lt;&lt; n &lt;&lt; ' ' &lt;&lt; endl;
}

int main()
{
    cin.tie(nullptr)-&gt;sync_with_stdio(false);
    long n;
    for (; cin &gt;&gt; n; st = {})
        solve(n);
    return 0;
}

注意

如果存在一个质因子比原 n 的开方大,那么最后一次执行 n /= i后,i 超过 sqrt(n)退出循环,此时的 n 一定是原 n 的约数,且如果他不是1的话,一定是个质数。</long,>

全部评论

相关推荐

07-02 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
下个早班:秒挂就是不缺人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务