质因数,约数个数、约数和

质因数

质因数:一个数的约数为质数,则这个约数称为质因数

首先我们了解一下算数基本定理

算数基本定理:(欧几里得最早提出 Respect)
任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1^a1xP2 ^a2xP3 ^a3…Pn ^an,这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数

举个例子

12=2^2x3(质因数为2、3)
360=2 ^3×3 ^2×5 ^1(质因数2、3、5)

不要把约数和质因数搞混哦!,12的约数有1、12、3、4、2、6但质因数只有2、3

如何利用算法求解质因数呢?

从算数基本定理可以看出任意一个数n,其中p1为最小的质因数,首先我们要找到p1,然后n每次除以等于p1,除到无法整除为止,在寻找出p2,在用n除以等于p2,依次类推,最终的n要么为1,要么不为1,当n不为1时,则剩余的n为最后一个质因数!

太抽象了, 我们来举一些例子,其实就是短除法!

n=12(n最后为1的情况)
i=2; n/=2 n=6 继续因为还没有除干净 n/=2 n=3无法整除 记录2为质因数 i++
i=3; n/=3 n=1 记录3为质因数 结束循环

n=14(n最后不为1的情况)
i=2;n/=2 n=7 i++ i=3,无法整除 i++, i=4 4>sqrt(14) 结束循环
n!=1; 所以最后一个质因数为n ,n=7

图解
在这里插入图片描述

实现代码

#include <bits/stdc++.h>

using namespace std;
const int maxn=1e4;

int prime_fac[maxn],cnt;
int n;
void solve(int n)
{
   
    for(int i=2; i*i<=n; i++)//注意循环终止条件
    {
   
        if(n%i==0)
        {
   
            cnt++;
            prime_fac[cnt]=i;
        }
        while(n%i==0)
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值