c语言素数筛法与分解素因数,质因数分解及代码:
计算方法
短除法
求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式的叫短除法,和除法的性质差不多,还可以用来求多个个数的公因式:
求最大公因数的一种方法,也可用来求最小公倍数。
求几个数最大公因数的方法,开始时用观察比较的方法,即:先把每个数的因数找出来,然后再找出公因数,最后在公因数中找出最大公因数。
例如:求12与18的最大公因数。
12的因数有:1、2、3、4、6、12。
18的因数有:1、2、3、6、9、18。
12与18的公因数有:1、2、3、6。
12与18的最大公因数是6。
这种方法对求两个以上数的最大公因数,特别是数目较大的数,显然是不方便的。于是又采用了给每个数分别分解质因数的方法。
12=2×2×3
18=2×3×3
12与18都可以分成几种形式不同的乘积,但分成质因数连乘积就只有以上一种,而且不能再分解了。所分出的质因数无疑都能整除原数,因此这些质因数也都是原数的约数。从分解的结果看,12与18都有公约数2和3,而它们的乘积2×3=6,就是 12与18的最大公约数。
采用分解质因数的方法,也是采用短除的形式,只不过是分别短除,然后再找公约数和最大公约数。如果把这两个数合在一起短除,则更容易找出公约数和最大公约数。
从短除中不难看出,12与18都有公约数2和3,它们的乘积2×3=6就是12与18的最大公约数。与前边分别分解质因数相比较,可以发现:不仅结果相同,而且短除法竖式左边就是这两个数的公共质因数,而两个数的最大公约数,就是这两个数的公共质因数的连乘积。
实际应用中,是把需要计算的两个或多个数放置在一起,进行短除。
在计算多个数的最小公倍数时,对其中任意两个数存在的约数都要算出,其它无此约数的数则原样落下。最后把所有约数和最终剩下无法约分的数连乘即得到最小公倍数。
只含有1个质因数的数一定是亏数。
(短除法详解:
短除符号就是除号倒过来。短除就是在除法中写除数的地方写两个数共有的质因数,然后落下两个数被公有质因数整除的商,之后再除,以此类推,直到结果互质为止(两个数互质)。
而在用短除计算多个数时,对其中任意两个数存在的因数都要算出,其它没有这个因数的数则原样落下。直到剩下每两个都是互质关系。
求最大公因数遍乘一边,求最小公倍数遍乘一圈。
(公约数:亦称“公因数”。是几个整数同时均能整除的整数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数。)
在用短除计算多个数时,对其中任意两个数存在的因数都要算出,其它没有这个因数的数则原样落下。直到剩下每两个都是互质关系。求最大公约数遍乘左边所有数公共的因数,求最小公倍数遍乘一圈。这种方法对求两个以上数的最大公因数,特别是数目较大的数,显然是不方便的。于是又采用了给每个数分别分解质因数的方法
)
Pollard Rho因数分解
1975年,John M. Pollard提出了第二种因数分解的方法,Pollard Rho快速因数分解。该算法时间复杂度为O(n^(1/4))。
分解质因数代码:
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
#include "stdio.h"#include"conio.h"main()
{intn,i;
printf("please input a number:");
scanf("%d",&n);
printf("%d=",n);for(i=2;i<=n;i++)while(n!=i)
{if(n%i==0)
{
printf("%d*",i);
n=n/i;
}else
break;
}
printf("%d",n);
getch();
}
另一种形式:
//返回质因数数组
Integer[] decPrime(intn) {
List list = new ArrayList();for (int i=2;i <= n;i++){while(n !=i){if(n%i != 0){break;//不能整除肯定不是因数,能够整除在这里一定是质数。因为所有的2,3,5,7//都被除完之后。剩下的因数只能是奇数,且是质数。
}
list.add(Integer.valueOf(i));
n= n/i;
}
}
list.add(Integer.valueOf(n));return list.toArray(newInteger[list.size()]);
}
另外代码:
。我们用所有正整数试验一下,从2开始进行试除,逐步增加除数的值,去寻找一个可以整除n的数。在Eratosthenes筛法的讨论中,我们知道如果n是一个复合数,那么它就会有一个素数
。算法9.3所示的就是这种方法的伪代码。这个算法有两个偱环路径,外部的和内部的。外部循环求唯一因数,内部循环求一个因数的多个复本。例如,
,外部循环求出因数2和3。内部循环求出2是一个多因数。
void trial_divisio_fac(intn)
{int a=2;while(a*a<=n)
{while(n%a==0)
{
cout<
n=n/a;
}
a++;
}if(n>1) cout<
}
上面的代码解释比较清楚。为什么这种方法可以得到素数。
因为我们在内层循环中,已经把当前a的所有倍数都去除了。这跟埃斯托尼算法是一样的。
复杂度 如果 ,这种情况下试除法通常都是很有效的。但是如果用来分解更大的整数,试除法就变得非常低效甚至不可用了。这种算法的复杂度是随着n的增加呈指数级别增长的。
(
试除法是整数分解算法中最简单和最容易理解的算法。
给定一个合数n(这里,n是待分解的整数),试除法看成是用小于等于
的每个素数去试除待分解的整数。如果找到一个数能够整除除尽,这个数就是待分解整数的因子。
).
例9.29
运用试除算法求1233的因数。
1233=3^2*137.
c语言素数筛法与分解素因数,质因数分解及代码:相关推荐
- 欧拉筛法原理C语言,素数筛法
素数筛 自古以来,素数就是一个有众多人研究的东西,而素数筛也是这些研究成果中的一个 素数筛是用来快速生成一个素数表的东西,比起生成素数的幼稚算法及其优化的方法,素数筛的速度更快,但是也常常会出现很多奇 ...
- Vijos P1786 质因数分解【质因数分解】
背景 NOIP2012普及组第一题 描述 已知正整数n是两个不同的质数的乘积试求出较大的那个质数. 格式 输入格式 输入只有一行包含一个正整数n. 输出格式 输出只有一行包含一个正整数p, 即较大的那 ...
- C语言函数实现质因数分解
目录 前言 -.质因数介绍和代码引用 1.引入库 2.读入数据 总结 前言 质因数分解要先区分哪些是素数,是素数则直接输出 -.质因数介绍和代码引用 1.引入库 代码如下: #include<s ...
- C语言:素数筛法与分解素因数
一.素数筛法 素数筛法是关于求小于某个大数(正整数)的所有素数的算法,首先有理论:任何整数n≥2都可以分解成若干质数的乘积,即n=p1p2···pr. 用筛法求素数的基本思想是:把从1开始的.某一范围 ...
- 水仙花数素数质因数分解的C语言实现
最近,我翻了一下之前的C语言教材,看了三个有意思的小程序,包括:寻找"水仙花数".判断某数是否为素数.对一个数进行质因数分解.我想把这三个东西放到一个程序中,便写下了此文. 算法步 ...
- C语言--质因数分解(非常简洁的代码实现)
C语言–质因数分解(非常简洁的代码实现) 这是百度上的概念:分解质因数只针对合数.(分解质因数也称分解素因数)求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止.分解质因数的算式叫短除法, ...
- 素数、最大公约数、最下公倍数、质因数分解
2013-08-18 11:20:43 素数.最大公约数.最下公倍数.质因数分解都是与素数相关的,解决了素数的问题,其他的都可以此为基础求解. 小结: 求1到n之间的素数的基本方法是通过遍历2到sqr ...
- C语言素数分解prime factoriziation算法(附完整源码)
素数分解prime factoriziation算法 素数相关结构体定义 实现了以下相关接口 C语言素数分解prime factoriziation算法完整源码(定义,实现,main函数测试) 素数相 ...
- 翁恺c语言第6周编程答案,程序设计入门——C语言 第6周编程练习 1 分解质因数(5分)(示例代码)...
1 分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. ...
最新文章
- [恢]hdu 2015
- 利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
- string类assign方法
- 探讨浏览器CSS选择器的权重!!!
- php 获取警告信息,获取PHP警告错误信息的解决方法_PHP教程
- linux查看正在运行的窗口,获取linux中打开的应用程序窗口的数量
- python3 isalnum
- 浪潮5280m4管理口ip_TPLink云路由器如何更改LAN口IP地址 TPLink云路由器更改LAN口IP地址方法【介绍】...
- 发现一个有意思的英文期刊 China and the World Ancient and Modern Silk Road
- 装机安装必备开发软件
- 自动采集收录导航源码
- 038--想和权证恋个爱
- 【C语言】C文件编译时间,日期,行号,文件名获取方式
- unity 场景背景替换2D图片方法
- 人工智能的必须的数学基础和编程基础
- 计算机考研时间计划表,【考研复习计划】_这里有最详细的考研复习计划时间表...
- 计算机u盘设备无法启动不了,U盘不能识别,该设备无法启动。(代码10)
- 山东交通学院linux期末考试题,山东交通学院《桥梁工程》期末考试试题(B).doc
- unity围绕物体旋转加角度限制
- 2019牛客多校第七场 F Energy stones 树状数组+算贡献转化模拟
热门文章
- silk lobe资源公众号_关于关注阿拉善盟公共资源交易中心微信公众号的通知
- word里双横线怎么打_如何在word中画线 怎么在word中输入横线[图文]
- 斐讯k2php环境,斐讯K2T SDK编译环境
- zippo蚀刻计算机键盘,【图片】蚀刻机自己填漆【zippo吧】_百度贴吧
- ASEMI整流二极管10A10参数,10A10压降,10A10作用
- USB VID和PID
- Qt,多语言软件,开发流程,总结
- 人们把使用计算机的能力和人生成功,等量齐观的意思
- crc生成多项式java_CRC 生成多项式
- FontAwesome免费图标在winform中的使用