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 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
PHP EOT定界符的使用详解
Sep 30 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
Mar 11 PHP
php使用标签替换的方式生成静态页面
May 21 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
php提交post数组参数实例分析
Dec 17 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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类分享
2014/02/07 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
如何让CI框架支持service层
2014/10/29 PHP
php安装swoole扩展的方法
2015/03/19 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
IE6 fixed的完美解决方案
2011/03/31 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
NestJs 静态目录配置详解
2019/03/12 Javascript
python实现矩阵乘法的方法
2015/06/28 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
django 信号调度机制详解
2019/07/19 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
期终自我鉴定
2014/02/17 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
二审答辩状范文
2015/05/22 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
golang日志包logger的用法详解
2021/05/05 Golang