PHP实现的分解质因数操作示例


Posted in PHP onAugust 01, 2018

本文实例讲述了PHP实现的分解质因数操作。分享给大家供大家参考,具体如下:

思路:

如果要计算$num的质数,则至少收集$num以内的质数数组,判断$num是否在质数数组里:

如果否,则判断当前质数$zhishu[$i]是否能再次将整除后的数整除,如果能,则质数数组“游标”不移动(还让当前质数$zhishu[$i]对被整除后的数取模)

如果不能(再次将整除后的数整除),则用下一个质数(让$i++)去测试是否整除。如果否($num在质数数组里),则表示$num本身就是个质数,直接echo之。(思路看得糊涂的话,直接看代码吧)

首先:用一个函数收集一定范围内的质数放到数组里返回。(把1从质数里剔除,从2开始算质数),代码和注释如下:

//得到1000以内的质数
function get_zhishu($num=1000){
  $num = floor($num);
  $zhishu = array();
  //先得到1000以内的质数
  for($i=1; $i<=$num; $i++){
    $flag = true; //当flag为false时表示该数不是素数
    for($j=2; $j<$num; $j++){ //$j从2开始,因为除数为1时,肯定能整除
      if($i>$j){ //$j如果比$i还大,取模肯定不为0,没有比较的意义
        $mod = $i%$j;
        if($mod == 0 ){ //当除数$j为$i以内时,如果取模为0,表示该数不是素数
          $flag = false;
        }
      }
    }
    if($flag){
      array_push($zhishu, $i);//如果$flag为真,则$i是质数
    }
  }
  array_shift($zhishu); //把1从质数数组中剔除
  return $zhishu;
}
$zhishu = get_zhishu(1000); //得到1到1000之内的质数

然后:从质数数组中,挨个取出(从最小的质数开始)符合条件(能被整除)的质数。代码和注释如下:

/**
 * @param int $num 要分解的质数
 * @param array $zhishu 1000以内的质数数组
 * @param int $i 相当于质数数组的"游标"
 * @author misaka去年夏天
 */
function fenjie_num($num, $zhishu, $i=0){
  if(!is_int($num) || $num<0){
    exit('请输入正整数!');
  }
  if(in_array($num, $zhishu)){ //如果该数为质数,则echo之
    echo $num,'<br />';
  }else{
    $ceil = ceil($num/$zhishu[$i]);
    if($ceil == ($num/$zhishu[$i])){
      echo $zhishu[$i],'<br />';
      if($ceil%$zhishu[$i]!=0){
        //如果当前质数还能被$ceil整除,则继续用该质数(不用$i++),比如90分解为2、3、3、5,否则让$i++再递归
        $i++;
      }
      fenjie_num((int)$ceil, $zhishu, $i);
    }else{
      fenjie_num($num, $zhishu, $i+1); //对于99这样的,不是质数,但也没第一次被整除的,用下一个质数($i++)测试它
    }
  }
}
fenjie_num(390, $zhishu);

运行结果:

2
3
5
13

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线分解质因数计算器工具:
http://tools.3water.com/jisuanqi/factor_calc

在线一元函数(方程)求解计算工具:
http://tools.3water.com/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:
http://tools.3water.com/jisuanqi/jsqkexue

在线计算器_标准计算器:
http://tools.3water.com/jisuanqi/jsq

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php数字转汉字代码(算法)
Oct 08 PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
php去除字符串中空字符的常用方法小结
Mar 17 PHP
php查询whois信息的方法
Jun 08 PHP
教大家制作简单的php日历
Nov 17 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
Oct 16 PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 #PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 #PHP
PHP实现随机数字、字母的验证码功能
Aug 01 #PHP
PHP使用XMLWriter读写xml文件操作详解
Jul 31 #PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 #PHP
PHP常用日期加减计算方法实例小结
Jul 31 #PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 #PHP
You might like
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
JS面向对象编程 for Cookie
2010/09/19 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
vue 限制input只能输入正数的操作
2020/08/05 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
python解析xml模块封装代码
2014/02/07 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python 元类实例解析
2018/04/04 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
python pillow模块使用方法详解
2019/08/30 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
经贸日语专业个人求职信
2013/12/13 职场文书
同事吵架检讨书
2014/02/05 职场文书
护士自我鉴定总结
2014/03/24 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
大学生个人学年总结
2015/02/15 职场文书
优秀大学生自荐信
2015/03/26 职场文书
答谢酒会主持词
2015/07/02 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
Win11软件图标固定到任务栏
2022/04/19 数码科技