题解 | #质数因子#

质数因子

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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务