题解 | #Factor Representation#

Factor Representation

https://ac.nowcoder.com/acm/problem/15860

首先这题可以想到一种暴力枚举的方法,就是把每个nn22~n\sqrt{n}枚举值因数,统计个数,但显然是要超时的(就算不超时,也很慢),所以我们要向优化一下。

首先,如果nn是个质数,那么肯定是输出No,所以可以特判一下。

//质数判定子程序
bool prime(int x) {
    if (x < 2) return false;//特判x<2的情况
    for (int i = 2; i <= sqrt(x); i ++)
        if (x % i == 0)
            return false;
    return true;
}

然后,既然是要有两个及以上的同样的质因数,所以我们可以直接用n % (i * i) == 0来判断,这样就少去了一个记录数组,同时减少了复杂度。

然后给出主程序代码:

while (cin >> n && n != 0) {
    bool flag = false;
    if(!prime(n)) {
        for (int i = 2; i <= sqrt(n); i ++)
            if (n % (i * i) == 0)//代码精华部分,需要思维
                flag = true;
    }
    if (flag) puts("Yes");//puts自动输出换行
    else puts("No");
}

Be will and be good!

已写的题解集 文章被收录于专栏

将自己知道的一些竞赛知识推广给大家

全部评论
if (n % (i * i) == 0)//代码精华部分,需要思维 能讲一下这一步吗大佬,为什么这样想的
1 回复 分享
发布于 2023-11-02 22:31 重庆

相关推荐

八股刚起步,看了javaguide,小林coding,还有面渣,感觉面渣是体验最好的,请问只看面渣够用吗,有不完善的需要补吗?
码农索隆:先背最基础的知识,然后理解情景题,现在面试大多数喜欢问情景题,更考验面试者的基础和临场发挥情况
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

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