用PHP如何实现将一个整数分解为质因数的积?

查看:79
本文介绍了用PHP如何实现将一个整数分解为质因数的积?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

例如给一个数90 ,得出结果"233*5";

自己也弄出来了结果,但是总觉得太繁琐了,还请大神看看有没有别的思路

//判断是否为素数 若是素数返回1,否返回0

function checkSS($num){
    if($num>0 && is_numeric($num) && is_int($num)){
        $flag = 1;
        for($i=2;$i<$num;$i++){
            if($num % $i == 0 && $num!=2){
                $flag = 0;
            }
        }
    }else{
        echo "请输入非0整数";
        exit;
    }
    return $flag;
}

//将非0整数分解为质因数之积

function splitNum($n){
    if(checkSS($n)){return $n."*1";}
    for($i=2;$i<abs($n);$i++){
        if($n % $i == 0 && checkSS($i)){
            $arr[] = $i;    //得到该数数所有不重复的质因数组成的组
        }
    }
//    var_dump($arr);exit;
    $res = array_product($arr);//该数字所有质因数之积
 if($res == $n){
     return implode('*',$arr); //若这个结果等于原数字,则以*号拆分数组为字符串得到结果  如:30 = 2*3*5
 }elseif(checkSS(abs($n/$res))){
     return implode('*',$arr)."*".$n/$res;//若原数字除以结果得到的是个质数,则直接乘上这个数 如: 90 = 2*3*5 *3
 }else{
     return implode('*',$arr)."*".splitNum($n/$res);//否则对原数字除以结果再进行一次分解 如: 180 = 2*3*5 *{6=(2*3)};
 }
}

解决方案

我提供一个吧。。。。

    $int = 111;
    
    if(!is_int($int) || $int === 0) {
        echo "wrong number!";die;    
    }
    
    if($int <= 2) {
        echo $int . "=" . $int;die;
    }
    
    $result = $int . '=';
    while($int%2 == 0) {
        $int     = $int/2;
        $result .= 2 . '*';
    }
    
    for($i = 3; $i <= $int; $i += 2) {
        while($int%$i == 0) {
            $int     = $int/$i;
            $result .= $i . '*';
        }
    }
    
    $result = trim($result, '*');
    
    echo $result;die;

这篇关于用PHP如何实现将一个整数分解为质因数的积?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆