Par exemple, étant donné un nombre 90, le résultat est "233*5" ;
J'ai aussi obtenu le résultat moi-même, mais j'ai toujours pensé que c'était trop fastidieux. J'aimerais demander aux experts de voir s'il y a d'autres idées.
//Déterminez s'il s'agit d'un nombre premier. S'il s'agit d'un nombre premier, il renvoie 1, sinon, il renvoie 0.
fonction checkSS ($num){
if($num>0 && is_numeric($num) && is_int($num)){
$drapeau = 1 ;
pour($i=2;$i<$num;$i++){
si($num % $i == 0 && $num!=2){
$drapeau = 0 ;
}
}
}autre{
echo "Veuillez entrer un entier différent de zéro";
sortie;
}
retourner $drapeau ;
//Décomposer un entier non nul en produit de facteurs premiers
fonction splitNum($n){
if(checkSS($n)){return $n."*1";}
pour($i=2;$i<abs($n);$i++){
si($n % $i == 0 && checkSS($i)){
$arr[] = $i; //Obtient le groupe de tous les facteurs premiers non répétitifs du nombre
}
}
// var_dump($arr);exit;
$res = array_product($arr);//Le produit de tous les facteurs premiers du nombre
si($res == $n){
return implode('*',$arr); //Si le résultat est égal au nombre d'origine, utilisez le signe * pour diviser le tableau en une chaîne pour obtenir le résultat. Par exemple : 30 = 2*3*5.
}elseif(checkSS(abs($n/$res))){
return implode('*',$arr)."*".$n/$res;//Si le nombre d'origine divisé par le résultat est un nombre premier, multipliez-le directement Par exemple : 90 = 2*3*5. *3
}autre{
return implode('*',$arr)."*".splitNum($n/$res);//Sinon, divisez le nombre d'origine par le résultat et décomposez-le à nouveau, par exemple : 180 = 2*3*5 *{6= (2*3)} ;
}
Je vais en fournir un. . . .
Effectuez d'abord l'algorithme de factorisation sur les nombres
Puis filtrez l'ensemble de résultats qui ne correspond pas à l'ensemble de résultats.