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_Flame(Version:Progress)的原代码
Oct 09 PHP
php include,include_once,require,require_once
Sep 05 PHP
cmd下运行php脚本
Nov 25 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
php网站地图生成类示例
Jan 13 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
PHP单链表的实现代码
Jul 05 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 PHP
一个非常实用的php文件上传类
Jul 04 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 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 is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
php curl_init函数用法
2014/01/31 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
JavaScript 事件的一些重要说明
2009/10/25 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
JS实现图片居中悬浮效果
2017/12/25 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
详解Puppeteer 入门教程
2018/05/09 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
js实现双人五子棋小游戏
2020/05/28 Javascript
python解析xml模块封装代码
2014/02/07 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
Python中格式化字符串的四种实现
2020/05/26 Python
python飞机大战游戏实例讲解
2020/12/04 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
护士辞职信范文
2014/01/19 职场文书
鲜果饮品店创业计划书
2014/01/21 职场文书
《故乡》教学反思
2014/04/10 职场文书
大学生毕业求职信
2014/06/12 职场文书
绿色校园广播稿
2014/10/13 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
报名委托书
2015/01/29 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
Python实现归一化算法详情
2022/03/18 Python
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers