题解 | #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 重庆

相关推荐

SaviorSu:直接说下学期可以请假,一般情况学校允许我26届,大三就直接去实习了
点赞 评论 收藏
分享
评论
4
2
分享

创作者周榜

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