题解 | #质数因子#

质数因子

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

相关推荐

用微笑面对困难:只要你保证项目和获奖都是真的就行尤其是“对战,总负责人”啊这些套职,基本上队员,打杂的都这么写
点赞 评论 收藏
分享
睡个觉先1555:你这个学历,这个实习,不知道你在紧张啥,包能找到好工作的
点赞 评论 收藏
分享
最近看到华为台风天还让员工上班,感觉近些年华为的风评都不咋样了我投了华为已经二面了,不知道能不能进入到华为,有点迷了
嵌入式劝退第一人:华为风评一直没好过,但每年也依然是一大批应届生的梦中情司,不冲突的。要我说,华为才是真的体面厂,说你在华为工作,身边的人,长辈什么的谁不说你一声牛逼
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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