在求分数的时候,只有求出最大公约数,才能得到最简化的分数
/** * 计算两个数的最大公约数 * @param $num1 整数1 * @param $num2 整数2 */ public function common_num($num1,$num2) { if($num1 == $num2){ $num1 = $num2 + 1; } $min = $num1>$num2 ? $num2:$num1; $max = $num1>$num2 ? $num1:$num2; $comnum = $this->common_check($max,$min); $t = array(); $t['min'] = $min/$comnum; $t['max'] = $max/$comnum; return $t; } public function common_check($max,$min) { $num = $max%$min; if($num == 0){ return $min; }else{ return $this->common_check($min,$num); } }
//两个数的最小公倍数是:两数之积除以最大公约数
//求一个数的所有因数,哪个数能整除该数,则哪个数就是这个数的因数
$num1 = rand(2,100); $arr = array(); for($i=1; $i<=$num1; $i++) { if($num1 % $i == 0) { $arr[] = $i; } }
/*
* 求三个数的最大公约数
* 方法为先求两个数的最大公约数得到com1,再拿com1和第三个数求最大公约数
* 最后得到这三个数的最大公约数为 $com1*$com1即两数之积;
*
* 求三个数的最小公倍数
* 方法为三数之积除以最大公约数
*/
/** * 随机生成一个小数 * @param $startnum 起始整数 * @param $endnum 结束整数 * @param $sdot 起始小数 * @param $edot 结束小数 */ function decimal($startnum,$endnum,$sdot=0,$edot=99) { $zerostr = ""; $dotcount = strlen($edot); $newnum = rand($startnum,$endnum); $newdot = rand($sdot,$edot); $zerocount = $dotcount - strlen($newdot); //小数位不够的话进行补0 if($zerocount>0){ for($i=0; $i<$zerocount; $i++){ $zerostr .= "0"; } } $newdot = $zerostr . $newdot; return $newnum . "." . $newdot; } //判断小数相除值是否是有限,并且小数位<4的 public function res_limite($start1,$end1,$s1,$e1,$start2,$end2,$s2,$e2) { $num1 = $this->decimal($start1,$end1,$s1,$e1); $num2 = $this->decimal($start2,$end2,$s2,$e2); $n = $num1/$num2; $length = 4; if(!is_int($n) && is_finite($n)){ $arr = explode('.',$n); $length = strlen($arr[1]); } if(!is_int($n) && $length<4){ $t = array(); $t['num1'] = $num1; $t['num2'] = $num2; return $t; }else{ return $this->res_limite($start1,$end1,$s1,$e1,$start2,$end2,$s2,$e2); } }
/** * 得到小于1的分数 */ public function common_num($num1,$num2) { if($num1 == $num2){ $num1 = $num2 + 1; } $min = $num1>$num2 ? $num2:$num1; $max = $num1>$num2 ? $num1:$num2; $comnum = $this->common_check($max,$min); $t = array(); $t['min'] = $min/$comnum; $t['max'] = $max/$comnum; return $t; }
/*
* 质数和合数
* 100以内的 质数为
* $arr = array(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97);
*/
//100以内的质数 $arr = array(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97); $num1 = rand(1,100); $count = count($arr); $flag = false; for($i=0; $i<$count; $i++) { if(($num1%$arr[$i]==0) && ($num1/$arr[$i]>1)) { $flag = true; break; } } if($flag){ $okanswer = '合数'; $erranswer = '质数'; }else{ $okanswer = '质数'; $erranswer = '合数'; }