C语言–质因数分解(非常简洁的代码实现)

这是百度上的概念:分解质因数只针对合数。(分解质因数也称分解素因数)求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式叫短除法,和除法的性质相似,还可以用来求多个数的公因式。

正文:
首先,质因数分解是针对非素数的,每一个非素数可以表示成它的部分因子乘积之和(可重复)例如 28 = 2 * 2 * 7

我们来看看怎么操作

例如:90的公因子为2,3,5,9,10,15 ·········

我们要用90从小到大除以它的公因子(注意:一个公因子可以被除多次)

1.我们先用最小的公因子除90: 90/2=45;(这一步分解出因子2)

2.因为45不能被2整除,所以就用下一个公因子3除90: 45/3=15;(这一步分解出因子3)

3.因为15能被当前公因子3整除,那么: 15/3=5;(这一步分解出因子3)

4.继续,因为5不能被3整除,那么:5/5=1(这一步分解除因子5) (这里最后一步的结束条件是得到的数 1 % 9(因数)!= 0)

这里按照我们的顺序把90分成了2 * 3 * 3 * 5

下面再来一个例子:
对28,我们进行分解

  1. 首先 ,28的因子从小到大为 2,4,7,14

  2. 28 / 2 =14;

  3. 14 / 2 = 7;

  4. ​ 7 / 7 = 1; (这里最后一步的结束条件是得到的数 1 % 7(因数)!= 0)

    那么 28 = 2 * 2 * 7;
    由此推出下面的代码

    #include<stdio.h>
    int Isprime(int n)     //函数功能--判断是否为素数
    {for (int i = 2; i < n / 2; i++)if (n % i == 0) return 1;return 0;
    }
    void fun(int n)         //函数功能--质因数分解
    {int i = 0, j;int m = n;for (j = 2;j < m/2; j++)     //从小到大寻找n的因数while(n % j == 0)   //当n%j(因数)== 0时,继续分解{printf("%d*", j);n /= j;}
    }
    int main()
    {int n;int c;scanf("%d", &n);      //输入要分解的数c = Isprime(n);       //判断是否为素数if (c)  fun(n);        //如果不是素数则进行分解else printf("it is a prime\n");   //如果是素数则不用分解
    }
    

    但是我们会发现这段代码运行出来是这样的:

打印的结果为 2 * 3 * 3 * 5*

尾巴后面多了个乘号

针对这个问题,我们在fun函数的while循环内稍作改动

下面是正解

#include<stdio.h>
int Isprime(int n)
{for (int i = 2; i < n / 2; i++)if (n % i == 0) return 1;return 0;
}
void fun(int n)
{int i = 0, j;int m = n;for (j = 2;j < m/2; j++)while(n % j == 0){printf("%d", j);if (n / j > 2) printf("*");n /= j;}
}
int main()
{int n;int c;scanf("%d", &n);c = Isprime(n);if (c)  fun(n);else printf("it is a prime\n");
}

这样就可以了。

第一次写这个,有不足的地方请吐槽,谢谢大家!




C语言--质因数分解(非常简洁的代码实现)相关推荐

  1. 水仙花数素数质因数分解的C语言实现

    最近,我翻了一下之前的C语言教材,看了三个有意思的小程序,包括:寻找"水仙花数".判断某数是否为素数.对一个数进行质因数分解.我想把这三个东西放到一个程序中,便写下了此文. 算法步 ...

  2. 100以内质因数分解代码

    100以内质因数分解代码 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<m ...

  3. 质因数分解(c语言)

    质因数分解 描述 格式 样例 代码及详细注释 描述 已知正整数n(n≤1000000000)是两个不同质数的乘积,试求出较大的那个质数. 格式 输入格式 输入只有一行,包含一个正整数 n. 输出格式 ...

  4. C语言函数实现质因数分解

    目录 前言 -.质因数介绍和代码引用 1.引入库 2.读入数据 总结 前言 质因数分解要先区分哪些是素数,是素数则直接输出 -.质因数介绍和代码引用 1.引入库 代码如下: #include<s ...

  5. C语言,分解质因数一个解法!_只愿与一人十指紧扣_新浪博客

    题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在,你的程序要读入一个 ...

  6. C++实现质因数分解

    质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数):否则称为合数.根据算术基本定理,每一个比1大的整数,要 ...

  7. 小白的刷题笔记一(质因数分解)

    最近在复习C语言基础,刷到了这道题: 1098:质因数分解 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 22139 通过数: 11165 [题目描述] 已知正整数n是两个不同的 ...

  8. 质因数分解求给定正整数的因数个数

    正整数因数个数的快速求法 以72为例,将72进行质因数分解,72 = 2*2*2*3*3 = 2^3 * 3^2 将底数2的幂次和底数3的幂次分别加1再相乘 得到72的因数个数 = (3+1) * ( ...

  9. 素数、最大公约数、最下公倍数、质因数分解

    2013-08-18 11:20:43 素数.最大公约数.最下公倍数.质因数分解都是与素数相关的,解决了素数的问题,其他的都可以此为基础求解. 小结: 求1到n之间的素数的基本方法是通过遍历2到sqr ...

最新文章

  1. android 百分号,关于Android资源文件中出现百分号的问题
  2. 推荐2一个在Java编码过程中得心应手的工具
  3. linux c fopen open 互相转换 文件指针 到 文件描述符 FILE* 转 FD
  4. fork+exit+php,php实现简单的守护进程创建、开启与关闭操作
  5. java程序员学C#基本语法两个小时搞定(对比学习)
  6. struts2的OGNL表达式(二)
  7. Hibernate提高性能的几点建议
  8. poj 3469(网络流模版)
  9. Mac开发必备工具(二)—— iTerm 2
  10. 墨迹天气语音包_广州天气|冷空气到货,任性吃火锅的理由又有了
  11. 使用procexp.exe查看线程
  12. Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)
  13. 局域网聊天程序 java MySQL_局域网聊天软件设计与实现(Linux,C++,MySQL)
  14. 报班华为HCIE的课程需要有IA和IE的基础吗?
  15. mysql count 返回值类型_mysql count详解及函数实例代码
  16. 计算机网络:运输层(流量控制,拥塞控制,连接管理)
  17. 阿里云国际版账号如何申请
  18. index.dat文件剖析(转)
  19. 【Proteus】Proteus里的蜂鸣器的使用
  20. 查论文、期刊的排名等的方法

热门文章

  1. 百度人机交互荣获“中国专利金奖”
  2. 航空货运数据挖掘那些事|航班换季
  3. mysql求班级男女比例_学习篇3:考生来源?男女比例?班级人数?
  4. 高通平台 Sensor 调试技巧 01
  5. 1930: [Shoi2003]pacman 吃豆豆
  6. 强化学习中好奇心机制
  7. Maven项目之运用Junit测试
  8. 语音合成——声学模型概述
  9. 3d高性能渲染服务器,怎么样用服务器端渲染 3D 模型的同时导出多角度 - 纳金网...
  10. Java中的static变量