题解 | #质数因子#

质数因子

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

C++求质数因子,总算不超时了!

不知道各位的情况如何,我在题解区看到的答案都遭遇了超时的问题。因此本题解采用了引入“根号”来判断质数。代码如下:

#include
using namespace std;

int main() 
{
    long n, old_n=0; 
    cin >> n;
    while (n != 1)
    {
        for (int i = 2; i <=sqrt(n); i++) //不要忽视“=”符号,很重要!
        {
            old_n = n;
            while (n % i == 0) {
                cout << i << " ";
                n /= i;
            }
            if (old_n != n)
                break;
        }
        if (old_n == n) 
        {
            cout << n << ' ';
            break;
        }
    }
return 0;
}
全部评论
中间的 if (old_n != n) break;的作用是什么呢,没有分析明白
3 回复 分享
发布于 2022-04-12 08:56
你这个答案是错的,只不过正好过了编译了,你自己试试6的话他是没有输出的,直接删帖吧,误人子弟
3 回复 分享
发布于 2022-08-14 16:24
请问输入6的话,为什么没有结果?
点赞 回复 分享
发布于 2022-06-24 09:22
java可以这样实现不超时 public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); long num = Long.parseLong(br.readLine()); long old_n=0; while(num !=1){ for (int i = 2; i<=Math.sqrt(num); i++) { old_n=num; while (num % i == 0) { System.out.print(i + " "); num /= i; } if(old_n !=num)break; } if(old_n ==num){ System.out.print(num + " "); break; } } } }
点赞 回复 分享
发布于 2022-08-11 11:46
写得有点问题,old_n=n写在for循环前面就能解决了,不然省下n=3时因为进不了FOR循环达不到old_n=n的条件,也达不到n=1的条件所以会卡死。所以6,12,24按你原本的写法都是无限循环的。
点赞 回复 分享
发布于 2022-12-28 00:20 江西

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
10-16 22:56
门头沟学院 C++
1234567800:歌尔今年给211开14-15k吗,我本地人连面试都不给😂
点赞 评论 收藏
分享
评论
41
6
分享
牛客网
牛客企业服务