最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中如何編寫一個數(shù)的n次方(冪運算)?

 更新時間:2024年07月13日 15:14:30   作者:拼搏@  
本文介紹了使用pow函數(shù)和自定義for循環(huán)計算冪的O(n)時間復(fù)雜度方法,然后重點講解了快速冪算法的分治思想,以及從二進制角度的解釋,包括如何通過位運算和循環(huán)迭代實現(xiàn)高效計算,給出了Java代碼實現(xiàn)

本文介紹了使用pow函數(shù)和自定義for循環(huán)計算冪的O(n)時間復(fù)雜度方法,然后重點講解了快速冪算法的分治思想,以及從二進制角度的解釋,包括如何通過位運算和循環(huán)迭代實現(xiàn)高效計算,給出了Java代碼實現(xiàn),

一、算法簡介

1.使用pow函數(shù)和自定義的for循環(huán)的時間復(fù)雜度為O(n)

/**計算x的y次方**/
//1.使用Pow函數(shù)
double res = Math.pow(x,y);
//2.自定義for循環(huán)
double res=x;
for(int i=1;i<y;i++){
     res=res*x;
}

2.快速冪的時間復(fù)雜度為O(log n)

二、快速冪的思想

(1)從分冶的角度出發(fā),計算 x^{y}

①假設(shè)y為偶數(shù),即計算 3^{8}

3^{8}=3^{2*4}=9^{4}=9^{2*2}=81^{2}=6561^{1}

我們將指數(shù) y,每次劃分為 \frac{y}{2},上述式子不需要進行8次循環(huán),而只需要三步即可完 成,注 3^{2*4}9^{2*2}是為了讓讀者好理解,而重復(fù)寫的。

②假設(shè)y為奇數(shù),即計算 3^{11}

3^{11}=3^{1+10}=3*3^{10}=3*9^{5}=3*9^{1+4}=3*9*81^{2}=3*9*6561^{1}

指數(shù)部分為奇數(shù)是可以化解成(1+偶數(shù))的形式的,這樣我們可以把指數(shù)為1的底 拿出來當(dāng)答案來乘,偶數(shù)部分同①繼續(xù)化解即可

偽代碼
    x=3,y=10,res=1
   while(指數(shù)y不等于0){
    if(指數(shù)y為奇數(shù)){
        res = res * x //提取底數(shù)出來,作為乘積
    }
    y=y/2 //指數(shù)二分
    x=x*x //底數(shù)平方

}

(2) 從二進制的角度出發(fā)

如8的二進制位:8=1000_{2};

二進制轉(zhuǎn)十進制:1000_{2}=1*2^3+0*2^2+0*2^1+0*2^0=8

那么3^8=3^{(1000)_{2}}=3^{1*2^3+0*2^2+0*2^1+0*2^0}=3^{0*2^0}*3^{0*2^1}*3^{0*2^2}*3^{1*2^3}(倒序?qū)?

觀察發(fā)現(xiàn):指數(shù)部分是由兩部分組成,第一部分是0001,第二部分2^0,2^1,2^2,2^3,發(fā)現(xiàn)2是循環(huán)增大的(用代碼x=x*x,循環(huán)迭代出來,但是否使用則看二進制位是否為‘1’),由于二進制要么為0要么為1(用代碼 y&1==1,來判斷)

再舉個詳細的例子(計算3^{11}):

11=1011

3^{11}=3^{1*2^{0}}*3^{1*2^{1}}*3^{0*2^{2}}*3^{1*2^{3}}=3^{1*1}*3^{1*2}*3^{0*4}*3^{1*8}

偽代碼:

 x=3,y=11,res=1

 while( (1011)y從尾往頭讀取){

  if( (y&1)==1){

     res=res*x;  //二進制位不為0,則相乘

     //如第一個1:res=1*3,    

     //第二個1:res=res*3^2

     //第三個數(shù)為0:不相乘,但x是不斷平方的,此時是x^4

     //第四個數(shù)為1:res=res*3^8  ,注意哦,平方是在if后面

       }

    二進制右移一位

    x=x*x; //依次迭代3^0,3^1,3^2,3^4,3^8................

 }

三、代碼實現(xiàn)

   public static double FastPow(int x,int y){
        double res= 1;
        while (y!=0){ 
            if(y%2 == 1){ //指數(shù)為奇數(shù),也可以利用位運算:(y&1)==1 (與操作): 判斷 n 二進制最右一位是否為 1
                res *= x;
            }
            y=y/2;  //指數(shù)循環(huán)二分,y>>=1 (移位操作): n 右移一位(可理解為刪除最后一位,即除以2)。
            x=x*x;  //底數(shù)平分

        }
        return res;
    }

 

到此這篇關(guān)于Java中如何編寫一個數(shù)的n次方(冪運算)?的文章就介紹到這了,更多相關(guān)Java中的冪運算(冪函數(shù))內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何解決@value獲取不到y(tǒng)aml數(shù)組的問題

    如何解決@value獲取不到y(tǒng)aml數(shù)組的問題

    文章介紹了在使用YAML配置文件時,通過@Value注解獲取整數(shù)和數(shù)組列表的配置方法,并提供了兩種解決方案:一種適用于非嵌套列表,另一種適用于嵌套列表等復(fù)雜配置
    2024-11-11
  • SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細過程

    SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細過程

    這篇文章給大家介紹了SpringBoot3.2.2整合MyBatis Plus3.5.5的詳細過程,文中通過代碼示例給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Java多線程通信實現(xiàn)方式詳解

    Java多線程通信實現(xiàn)方式詳解

    這篇文章主要介紹了Java多線程通信實現(xiàn)方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 關(guān)于Spring中聲明式事務(wù)的使用詳解

    關(guān)于Spring中聲明式事務(wù)的使用詳解

    Spring中事務(wù)分為編程式事務(wù)和聲明式事務(wù),編程式事務(wù)由于需要在代碼中硬編碼,在實際項目開發(fā)中比較少用到,實際開發(fā)中用的比較多的就是聲明式事務(wù),這篇文章主要給大家介紹了關(guān)于Spring中聲明式事務(wù)使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • java集合Collection常用方法解讀

    java集合Collection常用方法解讀

    這篇文章主要介紹了java集合Collection常用方法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java 商戶PC端接入支付寶支付的實現(xiàn)方法

    java 商戶PC端接入支付寶支付的實現(xiàn)方法

    這篇文章主要介紹了java 商戶PC端接入支付寶支付的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • SpringBoot如何獲取application.properties中自定義的值

    SpringBoot如何獲取application.properties中自定義的值

    這篇文章主要介紹了SpringBoot獲取application.properties中的自定義的值,目錄結(jié)構(gòu)文件代碼給大家列舉的非常詳細,需要的朋友可以參考下
    2021-09-09
  • SpringBoot資源文件的存放位置設(shè)置方式

    SpringBoot資源文件的存放位置設(shè)置方式

    這篇文章主要介紹了SpringBoot資源文件的存放位置設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java static方法用法實戰(zhàn)案例總結(jié)

    Java static方法用法實戰(zhàn)案例總結(jié)

    這篇文章主要介紹了Java static方法用法,結(jié)合具體案例形式總結(jié)分析了java static方法功能、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09
  • IDEA與MyEclipse代碼量統(tǒng)計方式

    IDEA與MyEclipse代碼量統(tǒng)計方式

    文章介紹在項目中不安裝第三方工具統(tǒng)計代碼行數(shù)的方法,分別說明MyEclipse通過正則搜索(排除空行和注釋)及IDEA使用Statistic插件或調(diào)整搜索設(shè)置(修改ide.usages.page.size)的兩種操作方式,并強調(diào)需根據(jù)需求靈活選擇
    2025-08-08

最新評論

延川县| 泰兴市| 郓城县| 东阳市| 宝坻区| 鹤岗市| 禹城市| 永吉县| 桐庐县| 高清| 巴彦县| 辽宁省| 丰原市| 阿巴嘎旗| 曲松县| 禄丰县| 神农架林区| 康定县| 南通市| 元阳县| 荥经县| 庆安县| 泸定县| 桦南县| 建水县| 南召县| 云龙县| 岫岩| 沽源县| 温州市| 南汇区| 高唐县| 平舆县| 民县| 万载县| 普安县| 德江县| 稻城县| 敦煌市| 日土县| 科技|