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 20 PHP
php获取字段名示例分享
Mar 03 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
php开发工具有哪五款
Nov 09 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
php数组遍历类与用法示例
May 24 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
PHP copy函数使用案例代码解析
Sep 01 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 SQLite类
2009/05/07 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
简单的cookie计数器实现源码
2013/06/07 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
班级活动策划书
2014/02/06 职场文书
个人委托书怎么写
2014/04/04 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
服务标兵事迹材料
2014/05/04 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
初中作文评语集锦
2014/12/25 职场文书
生日宴会祝酒词
2015/08/10 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python