质因数 求约数 c语言,【初等数论】 求一个数有多少约数及所有约数之和、分解质因数...

本文探讨了分解质因数的算法,介绍了如何计算一个数的约数个数和约数之和。通过算术基本定理,将数转化为素数的乘积形式,进而利用公式求解。文章中提供的算法包括检查最小质数并进行因数分解,同时提出了对于更优算法的期待。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做题遇见,于是就搜了一下,于是就有了这篇文章。(其实我不知道原理....Orz)我觉得分解质因数的最优算法应该不是我这篇文章中的这个.....谁有好的算法可以给我说一下,谢谢。

1.有多少个约数:

先分解质因数

因数的次数分别是4,2,1

所以约数的个数为(4+1)*(2+1)*(1+1)=5*3*2=30个

eg:

先分解质因数

720=24*32*51

因数的次数分别是4,2,1

所以约数的个数为(4+1)*(2+1)*(1+1)=5*3*2=30个

2.所有约数之和:

2004的约数之和为:1, 2, 3, 4, 6, 12, 167, 334, 501, 668, 1002 ,2004  = 4704

如何求一个数所有约数之和呢?

首先,应用算术基本定理,化简为素数方幂的乘积。

X = a1^k1 * a2^k2........an^kn

X的所有素数之和可用公式(1+a1 + a1^2...a1^k1) * (1+a2 + a2^2...a2^k2) * .....(1+an + an^2...an^kn)表示

如:

2004 = 2^2  * 3  *167

2004所有因子之和为(1  + 2 + 2^2) * (1 + 3) * ( 1 + 167) = 4704;

程序实现的时候,可利用等比数列快速求1 + a1 + a1^2 + .....a1^n;

3.分解质因数

我用的算法是这个:

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。  (2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,   重复执行第一步。  (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值