题解 | #质数因子#

质数因子

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

#include <stdio.h>

int main() {
    //思路:情况1,本身就是质数,输出自身即可;
    //情况2,都是质因子,按序输出所有因子即可;
    //情况3,有质因子也有合数因子,合数因子可以再拆分为质因子;
    //处理办法1:获取数据范围内的所有质数构建质数表,然后根据质数表逐层进行
    //除法筛查;处理方法2:判断当前数据是否为质数,如果不是质数则按照一定
    //方式进行逐层筛查
    long num;//存储输入的数字
    int count=0;//用来进行格式控制,确保其输出满足数字空格的格式
    scanf("%d",&num);
    for(int i=2;i<=num;i++){
        if(i*i>num){//此处的代码是为了保证不超时而做的改进
            i=num;
        } 
	  //由于之前测试的时候在2000000014用例处出现超时,是因为2000000014=2*1000000007,逐个遍历的话
	  //需要循环次数太多,而该判断的好处在于,如果说i已经遍历到sqrt(num)的层次,那么说明此时的num必然
	  //是一个素数,则省略后续线性遍历的过程直接将i的值变成num即可
	  //另外,还可以尝试做的一个小改进是,除了2之外没有偶数的素因子,所以可以把2单独判断,后续的步长取i=i+2
	  //以减少循环总次数
        while(num%i==0){
            if(count==0){
                printf("%d",i);
                count++;
            }
            else{
                printf(" %d",i);
            }
            num = num/i;
        }
    }
    printf("\n");
    
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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