欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php計(jì)算兩個(gè)整數(shù)的最大公約數(shù)常用算法小結(jié)

 更新時(shí)間:2015年03月05日 09:55:23   作者:OSC首席鍵客  
這篇文章主要介紹了php計(jì)算兩個(gè)整數(shù)的最大公約數(shù)常用算法,實(shí)例總結(jié)了求最大公約數(shù)的三種常用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了php計(jì)算兩個(gè)整數(shù)的最大公約數(shù)常用算法。分享給大家供大家參考。具體如下:

復(fù)制代碼 代碼如下:
<?php
//計(jì)時(shí),返回秒
function  microtime_float ()
{
    list( $usec ,  $sec ) =  explode ( " " ,  microtime ());
    return ((float) $usec  + (float) $sec );
}
//////////////////////////////////////////
//歐幾里得算法
function ojld($m, $n) {
    if($m ==0 && $n == 0) {
        return false;
    }
    if($n == 0) {
        return $m;
    }
    while($n != 0){
        $r = $m % $n;
        $m = $n;
        $n = $r;
    }
    return $m;
}
//////////////////////////////////////////
//基于最大公約數(shù)的定義
function baseDefine($m, $n) {
    if($m ==0 && $n == 0) {
        return false;
    }
    $min = min($m, $n);
    while($min >= 1) {
        if($m % $min == 0){
            if($n % $min ==0) {
                return $min;
            }
        }
        $min -= 1;
    }
    return $min;
}
////////////////////////////////////////////
//中學(xué)數(shù)學(xué)里面的計(jì)算方法
function baseSchool($m, $n) {
    $mp = getList($m); //小于$m的全部質(zhì)數(shù)
    $np = getList($n); //小于$n的全部質(zhì)數(shù)
    $mz = array();  //保存$m的質(zhì)因數(shù)
    $nz = array();  //保存$n的質(zhì)因數(shù)
    $mt = $m;
    $nt = $n;
    //m所有質(zhì)因數(shù)
    //遍歷m的全部質(zhì)數(shù),當(dāng)能夠被m整除時(shí),繼續(xù)下一次整除,知道不能被整除再取下一個(gè)能夠被m整除
    //的質(zhì)數(shù),一直到所有出現(xiàn)的質(zhì)數(shù)的乘積等于m時(shí)停止
    foreach($mp as $v) {
        while($mt % $v == 0) {
            $mz[] = $v;
            $mt = $mt / $v;
        }
        $c = 1;
        foreach($mz as $v) {
            $c *= $v;
            if($c == $m){
                break 2;
            }
        }
    }
    //n所有質(zhì)因數(shù)
    foreach($np as $v) {
        while($nt % $v == 0) {
            $nz[] = $v;
            $nt = $nt / $v;
        }
        $c = 1;
        foreach($nz as $v) {
            $c *= $v;
            if($c == $n){
                break 2;
            }
        }
    }
    //公因數(shù)
    $jj = array_intersect($mz, $nz); //取交集
    $gys = array();
    //取出在倆數(shù)中出現(xiàn)次數(shù)最少的因數(shù),去除多余的。
    $c = 1; //記錄數(shù)字出現(xiàn)的次數(shù)
    $p = 0; //記錄上一次出現(xiàn)的數(shù)字
    sort($jj);
    foreach($jj as $key => $v) {
        if($v == $p) {
            $c++;
        }
        elseif($p != 0) {
            $c = 1;
        }
        $p = $v;
        $mk = array_keys($mz, $v);
        $nk = array_keys($nz, $v);
        $k = ( count($mk) > count($nk) ) ? count($nk) : count($mk);
        if($c > $k) {
            unset($jj[$key]);
        }
    }
    $count = 1;
    foreach($jj as $value) {
        $count *= $value;
    }
    return $count;
}
//求給定大于等于2的整數(shù)的連續(xù)質(zhì)數(shù)序列
//埃拉托色尼篩選法
function getList($num) {
    $a = array();
    $a = array();
    for($i = 2; $i <= $num; $i++) {
        $a[$i] = $i;
    }
    for( $i = 2; $i <= floor( sqrt($num) ); $i++ ) {
        if($a[$i] != 0) {
            $j = $i * $i;
            while($j <= $num) {
                $a[$j] = 0;
                $j = $j + $i;
            }
        }
    }
    $p = 0;
    for($i = 2; $i <= $num; $i++) {
        if($a[$i] != 0) {
            $L[$p] = $a[$i];
            $p++;
        }
    }
    return $L;
}
/////////////////////////////////////
//test
$time_start  =  microtime_float ();
//echo ojld(60, 24);       //0.0000450611 seconds
//echo baseDefine(60, 24); //0.0000557899 seconds
echo baseSchool(60, 24);   //0.0003471375 seconds
$time_end  =  microtime_float ();
$time  =  $time_end  -  $time_start ;
echo '<br>' . sprintf('%1.10f', $time) . 'seconds';

希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • PHP實(shí)現(xiàn)的策略模式示例

    PHP實(shí)現(xiàn)的策略模式示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的策略模式,簡單介紹了策略模式的概念、原理并結(jié)合實(shí)例形式分析了php策略模式的相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-03-03
  • php之性能優(yōu)化案例

    php之性能優(yōu)化案例

    這篇文章主要介紹了php之性能優(yōu)化案例,本文通過多個(gè)案例和多種場(chǎng)景下講述了如何對(duì)php腳本進(jìn)行性能上的優(yōu)化,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • PHP中10個(gè)不常見卻非常有用的函數(shù)

    PHP中10個(gè)不常見卻非常有用的函數(shù)

    PHP中10個(gè)雖然不常見卻非常有用的函數(shù),對(duì)于有特殊需求的朋友可以參考下,充分發(fā)揮php的優(yōu)勢(shì)。
    2010-03-03
  • window+nginx+php環(huán)境配置 附配置搭配說明

    window+nginx+php環(huán)境配置 附配置搭配說明

    官方并不建議你將Non Thread Safe 應(yīng)用于生產(chǎn)環(huán)境,所以我們選擇Thread Safe 版本的PHP來使用。
    2010-12-12
  • PHP Swoole異步Redis客戶端實(shí)現(xiàn)方法示例

    PHP Swoole異步Redis客戶端實(shí)現(xiàn)方法示例

    這篇文章主要介紹了PHP Swoole異步Redis客戶端實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了php操作Swoole異步Redis客戶端相關(guān)擴(kuò)展安裝與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • php miniBB中文亂碼問題解決方法

    php miniBB中文亂碼問題解決方法

    miniBB因?yàn)楹喖s而美麗,但國內(nèi)使用人數(shù)極少, 好多人都是因?yàn)橹形膩y碼而放棄
    2008-11-11
  • PHP中防止SQL注入實(shí)現(xiàn)代碼

    PHP中防止SQL注入實(shí)現(xiàn)代碼

    PHP中防止SQL注入實(shí)現(xiàn)代碼,需要的朋友可以參考下。
    2011-02-02
  • Discuz 6.0+ 批量注冊(cè)用戶名

    Discuz 6.0+ 批量注冊(cè)用戶名

    Discuz 6.0+ 批量注冊(cè)用戶名 此方法適合于手動(dòng)采集用戶名,自動(dòng)注冊(cè)用戶名,這樣做的好處是比較逼真!
    2009-09-09
  • php實(shí)現(xiàn)統(tǒng)計(jì)郵件大小的方法

    php實(shí)現(xiàn)統(tǒng)計(jì)郵件大小的方法

    以下是對(duì)使用php實(shí)現(xiàn)統(tǒng)計(jì)郵件大小的方法進(jìn)行了分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • 遭遇php的in_array低性能問題

    遭遇php的in_array低性能問題

    PHP的性能一直在提高。然而,若是用的不恰當(dāng),或是一個(gè)不留神,還是可能會(huì)踩到PHP內(nèi)部實(shí)現(xiàn)方面的坑的。我在前幾天的一個(gè)性能問題上就碰到了
    2013-09-09

最新評(píng)論