在求分数的时候,只有求出最大公约数,才能得到最简化的分数
/**
* 计算两个数的最大公约数
* @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 = '合数';
}