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 09 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
Oct 29 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
linux下编译安装memcached服务
Aug 03 PHP
WordPress网站性能优化指南
Nov 18 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
Feb 22 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 PHP
php-msf源码详解
Dec 25 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 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
jQuery中:submit选择器用法实例
2015/01/03 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
easyui validatebox验证
2016/04/29 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
js实现图片360度旋转
2017/01/22 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
Python操作MongoDB详解及实例
2017/05/18 Python
使用python实现链表操作
2018/01/26 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
水果花束:Fruit Bouquets
2017/12/20 全球购物
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
给小学生的新年寄语
2014/04/04 职场文书
服装发布会策划方案
2014/05/22 职场文书
高中学校对照检查材料
2014/08/31 职场文书
2014年度思想工作总结
2014/11/27 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
考勤制度通知
2015/04/25 职场文书
军事博物馆观后感
2015/06/05 职场文书