题解 | #质数因子#

质数因子

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

这道题第一思路是直接用除过的数去逐个找因数,而且因数因为只除一次所以必然是质数。
但是当遇到较大的数时会出现超时,原因是如果是一个较大的质数的话,要找到他自己本身要花费许多空余的循环。
根据解题思路提醒,加了一个if判断。即质因数小于该数的平方根。那么对于较大的质数来说如果,i=sqrt(n)还不能把被整除,说明它没有除自身以外的质因数了,所以就直接令它除以自身。
#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=2;i<=n;i++)
    {
        if(i>sqrt(n)) i=n;
        //质数5的平方根大于质数2,3大于5的平方根。
        //一个数的质因数除了自身外,都小于其平方根。
        while(n%i==0)
        {
            n/=i;
            printf("%d ",i);
        }
    }
    return 0;
}

全部评论

相关推荐

评论
4
2
分享

创作者周榜

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