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动态生成VRML网页
Oct 09 PHP
用PHP生成静态HTML速度快类库
Mar 18 PHP
PHP stream_context_create()作用和用法分析
Mar 29 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
php 启动报错如何解决
Jan 17 PHP
PHP内核探索:变量概述
Jan 30 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
解析WordPress中的post_class与get_post_class函数
Jan 04 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
PHP Laravel 上传图片、文件等类封装
Aug 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
pw的一个放后门的方法分析
2007/10/08 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
学习jQuey中的return false
2015/12/18 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
jQuery属性选择器用法实例分析
2019/06/28 jQuery
Python解释执行原理分析
2014/08/22 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
Python延时操作实现方法示例
2018/08/14 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
python输出决策树图形的例子
2019/08/09 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python内置类型性能分析过程实例
2020/01/29 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
什么是继承
2013/12/07 面试题
交通事故赔偿协议书范本
2014/04/15 职场文书
篮球比赛策划方案
2014/06/05 职场文书
实验室标语
2014/06/21 职场文书
销售会议开幕词
2016/03/04 职场文书
浅谈如何保证Mysql主从一致
2022/03/13 MySQL
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers