质因子分解的问题就是给定一个n使得n能够分解为多个因子的乘积形式,并且相同因子用指数形式表示;

例如180=2^23^25;

对于这个问题,很好理解,我们的目的就是寻找其因子,通常的方法也就是从0开始枚举,然后通过取模或者整除操作来看是否是我们需要的元素;

具体的思路如下所示:

我们首先建立一个结构体:

struct factor{

int x;

int cnt;

}fac[10];

这里为每一个符合条件的因子创立一个结构体,fac数组是当前该数字所有因子存储数组;

结构体内x代表当前的因子,cnt代表当前因子出现的个数;

这里开10的目的是如果开更大会导致int溢出,并没有什么必要;

接下来就是计算部分;

我们对1~sqrt(n)挨个进行枚举;这里借鉴了寻找判定素数的概念,因为如果k存在,为n的质因子,对于n/k*n来说,其也是n的质因子,我们的目的是寻找最小质因子,所以只需要枚举到sqrt(n)就可以;

接下来要注意理解一个质因子分布的问题;

对于我们枚举到sqrt(n),必然会出现两种情况:

1.所有质因子都在sqrt(n)的枚举范围内;

2.有一个质因子大于sqrt(n),但其余的说有质因子都在sqrt(n)范围内,并且该较大的质因子必为素数;

我们该怎么理解这个问题,第一条很好理解,显然成立,那么第二条必然成立吗?

会不会有两个数字斗大于sqrt(n),并且这两个既可能是合数有可能是素数?

首先,不可能有两个质因子大于sqr(n),这样会导致乘积大于n,所以不符合初始条件;

那么剩下的质因子一定为素数嘛?

如果这个质因子是合数,则说明可以分解,必定可以分为多个较小质因子的乘积,或者多个数和一个素数的乘积;

所以无论那种情况,都是两种情况中的一个;

所以接下来我们通过枚举,对一个质因子猛除,记录他的出现次数,如果有余数,进行下一个数字的枚举猛除;直到到达sqrt(n)边界,如果还是有余数,则说明有第二个条件发生,有个较大的质因子,所以直接记录,因为这个质因子只可能出现一次,如果多次会使得乘积大于n;

大致的判断逻辑如下所示:

for(int i=0;i

if(n%prime[i]==0){

fac[num].x=prime[i];

fac[num].cnt=0;

while(n%prime[i]==0){

fac[num].cnt++;

n/=prime[i];

}

num++;

}

}

if(n!=1){

fac[num].x=n;

fac[num++].cnt=1;

}

python质因子分解_质因子分解_个人文章 - SegmentFault 思否相关推荐

  1. python经济统计公报_东哥起飞 的动态 - SegmentFault 思否

    作者:xiaoyu 微信公众号:Python数据科学 前言 玩过建模的朋友都知道,在建立模型之前有很长的一段特征工程工作要做,而在特征工程的过程中,探索性数据分析又是必不可少的一部分,因为如果我们要对 ...

  2. python之父去面试-面试题_个人文章 - SegmentFault 思否

    1 Spring Bean是什么? 在spring中由Spring创建和管理的对象称为bean, bean有相关的特性,例如懒加载,作用域,生命周期这些. 懒加载就是延迟加载,启动的时候,会创建所有对 ...

  3. python程序执行完后重头开始做烧饼_下塘烧饼 的动态 - SegmentFault 思否

    一.背景 java8的垃圾回收器一般推荐的是parNew+CMS,分别针对新生代和老年代的垃圾回收器.实际生产上,有时需要分析GC日志,检查GC回收有没有引起过多的系统暂停,特别是full GC. 二 ...

  4. img summernote 加类_控制好情绪 的动态 - SegmentFault 思否

    前言因为工作中经常用到这些方法,所有便把这些方法进行了总结. JavaScript 1. type 类型判断isString (o) { //是否字符串 return Object.prototype ...

  5. tr闭包_蓝色的梦 的动态 - SegmentFault 思否

    图标是页面中非常友好的附加物,许多网站都会使用各种图标来美化页面样式,给用户提供更好的指引.本文将会和大家一起学习页面图标的发展史,以及当前的最优解决方案. 传统图标 字体图标 SVG 图标 传统图标 ...

  6. css 高度塌陷_高度塌陷问题_前端技术文章 - SegmentFault 思否

    1. 高度塌陷 在文档流中,父元素的高度默认被子元素撑开,也就是说子元素多高,父元素就多高.但是, 当为子元素设置浮动后,子元素会完全脱离文档流.此时,将会导致子元素无法撑起父元素的高度,导致父元素的 ...

  7. java - websocket配合spring-security使用token认证_个人文章 - SegmentFault 思否

    使用框架介绍 spring boot 1.4.3.RELEASE spring websocket 4.3.5.RELEASE spring security 4.1.3.RELEASE sockjs ...

  8. node.js - Nodejs 分布式事务_个人文章 - SegmentFault 思否

    事务是恢复和并发控制的基本单位,保证 ACID:原子性.一致性.隔离性.持久性. 对于全是异步的 Nodejs 而言, 并不适合做事务操作: 代码书写上: try ... catch ... 是写给人 ...

  9. java9 gc log参数迁移_个人文章 - SegmentFault 思否

    序 本文主要研究一下java9 gc log参数的迁移. 统一JVM及GC的Logging java9引进了一个统一的日志框架,对gc log的输出进行了统一的配置. 相关JEP(JDK Enhanc ...

最新文章

  1. IOS 内存管理小结
  2. Android系统编译so库提示error undefined reference to '__android_log_print问题的解决
  3. 无监督学习与监督学习_有监督与无监督学习
  4. Python字符串格式化--formate()的应用
  5. 操作系统—死锁的避免
  6. Noi2016 循环之美
  7. Pwn2Own黑客大赛战况:iPhone 20秒被黑
  8. CentOS 通过yum来升级php到php5.6
  9. C++虚复制构造函数,设置Clone()方法返回基类指针,并设置为虚函数
  10. 样式和多级编号的关系
  11. JavaSE——多线程
  12. 某教程学习笔记(一):1、windows基础
  13. 基于物联网的防盗报警器设计与实现
  14. Windows10启动缓慢的原因以及解决方法
  15. VMware虚拟机快速复制多个Linux系统
  16. C# 获取汉字的拼音首字母(转)
  17. python做flash帧动画_[练习]利用CSS steps 实现逐帧动画
  18. 商业模式与盈利模式的区别
  19. PDF文件可以修改吗,怎么修改PDF文件内容
  20. 什么是BGP多线,与普通双线的区别

热门文章

  1. 在线下单系统think php,昱杰订单管理系统(ThinkPHP版) v19.0
  2. vue中事件监听watch
  3. Java中输入一个整数n,实现n的阶乘
  4. 经典语录(确实经典)
  5. 白天建筑师,晚上CG艺术家,他将建筑的华丽发挥极致
  6. 蓝桥杯学习03-共阳数码管的静态显示
  7. 台式计算机wifi老掉线,电脑连接WiFi容易断线或速度慢怎么回事 教你怎么解决
  8. 升级Unity2018.3.2f1出现PrecompiledAssemblyException: Multiple precompiled assemblies with the same name
  9. “我靠这4个项目,拿到了年薪30万+的大厂Offer”
  10. JavaScript 小案例 弹幕