题解 | #质数因子#

质数因子

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

解题思路:

  1. 质数:满足质数(>1的自然数且不能被1和本身以外的自然数整除),则i从2开始;
  2. 从小到大且重复列举:i++;
  3. 质因数:(假设输入被除数为num)
    • 比被除数小:i<num
    • 商大于除数i:注意寻找除数时,最大除数应满足i<=num^0.5,否则商必然小于当前除数
  4. 执行过程:
    • 获取因数:每次做除法后,将整除的商作为下一次被除数num,则num/=i
    • 保证重复整除:while循环判断num%i==0
    • 输出较大除数:for循环结束后,加入判断if(n-1),执行若num值为1,则表示已输出所有质因数,否则直接输出该数为质因数
  5. 准备下次接收:结尾换行,准备下次接收。
#include<stdio.h>
 
int main() 
{
    int num = 0;
    while (~scanf("%d", &num))	//有输入时进入该while循环
    {
        int tmp = num;
        for (int i = 2; i <= sqrt(tmp) && i <= num; i++)
        {
            while (num % i == 0)   //用if同个质因数只除1次,则用while
            {
                printf("%d ", i);   //输出重复质因子
                num /= i;
            }
        }
        if (num - 1)    //i > sqrt(tmp)时输出,i <= sqrt(tmp)时while已输出此处不输出
        {
            printf("%d ", num); //输出> sqrt(tmp)的质因子
        }
        putchar('\n');
    }
    return 0;
}
全部评论

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务