栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

分解质因子

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分解质因子

质因子的分解 什么是质因子的分解
  • 所谓质因子的分解是指将一个大于1的正整数写成一个或多个质数的乘积
  • 例如6=23, 180=2233*5

显然,最后都是关于多个质数的乘积,所以我们可以先打印出素数表准备好。

具体分析

1.由于每个质因子都可能不止出现过一次,因此我们不仅需要统计质因子数值,还要统计其出现的个数
所以使用结构体比较方便

struct factor {
    int x;  //数值
    int num;  //个数
}fac[10];

因为考虑到 2 * 3 * 5 * 7 * 11 * 13 * 17 * 19 * 23 * 29 就已经超过int的范围
所以,对于一个int范围内的数来说,fac数组我们开到10就已经足够了

对于一个正整数来说,它的质因子要么全部小于sqrt(n),要么只有一个大于sqrt(n)的质因子

思路
  • 首先枚举小于sqrt(n)的质数,进行取余判断是否为n的因子。
  • 如果是,则在fac数组中添加一个元素,并将其num=0。
  • 然后,进行一个小的while循环,截止条件是取余不等于0,让n不断除以该数,num++。
  • 在sqrt(n)以内的质数都判断完毕后,如果仍然n!=1,说明还没有被除尽,说明存在一个大于sqrt的数
  • 也就是剩下的这个"n",将其添加进去
struct factor{
    int n;
    int num;
}fac[10];
int prime[maxn], pNum;
bool p[maxn] = {false};
//记录质因子的个数
int x;

//埃氏筛法
void Find_Prime() {
    for(int i=2; i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号