精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

小女孩把快速冪奧秘探索出來了!

開發 前端
顧名思義,快速冪就是快速算底數的n次冪。你可能疑問,求n次冪算n次疊乘不就行了?當n巨大無比時候,如果需要末尾有效尾數值等信息這個可能超出計算機運算范圍。

[[416359]]

本文轉載自微信公眾號「bigsai」,作者大賽。轉載本文請聯系bigsai公眾號。

前言

大家好,我是bigsai,之前有個小老弟問到一個劍指offer一道相關快速冪的題,這里梳理一下講一下快速冪!

快速冪是什么?

顧名思義,快速冪就是快速算底數的n次冪。你可能疑問,求n次冪算n次疊乘不就行了?當n巨大無比時候,如果需要末尾有效尾數值等信息這個可能超出計算機運算范圍。

有多快?

快速冪時間復雜度為 O(log?n), 與樸素的O(n)相比效率有了極大的提高(int 范圍10位長度數字32次之內就能搞定,long 范圍20位長度數字64次之內也能搞定,你看有多快)。

用的多么?

快速冪屬于數論的范疇,本是ACM經典算法,但現在各廠對算法的要求越來越高,并且快速冪適用場景也比較低多并且相比樸素方法有了非常大的提高,所以掌握快速冪算法已經是一名更合格的工程師必備要求!

下面來詳細看看快速冪算法吧!

快速冪介紹

先看個問題再說:

初探

首先問你一個問題,如果讓你求 (2^10)%1000你可能會這樣寫:

  1. int va=1; 
  2. for(int i=0;i<10;i++) 
  3.   va*=2; 
  4. System.out.println(va%10000); 

熟悉的1024沒問題,總共計算了10次。但是如果讓你算 (2^50)%10000呢?

你可能會竊喜,小樣,這就想難住我?我知道int只有32位,50位超出范圍會帶來數值越界的異常,我這次可以用long,long有64位呢!

  1. long va=1; 
  2. for(int i=0;i<50;i++) 
  3.   va*=2; 
  4. System.out.println(va); 
  5. System.out.println(va%10000); 

計算50次出了結果正當你暗暗私喜的時候又來了一個要命的問題:讓你算 (2^1e10)%10000 且不許你用Java大數類,你為此苦惱不知所措。這時bigsai小哥哥讓你百度下取模運算,然后你恍然大悟,在紙上寫了幾個公式:

  1. (a + b) % p = (a % p + b % p) % p  (1) 
  2. (a - b) % p = (a % p - b % p ) % p (2) 
  3. (a * b) % p = (a % p * b % p) % p  (3) 
  4. a ^ b % p = ((a % p)^b) % p        (4) 

你還算聰明一眼發現其中的規律:

  1. (a * b) % p = (a % p * b % p) % p   (3) 
  2. (2*2*2···*2) %1e10=[2*(2*2···*2)]%1e5=(2%1e5)*(2*2···*2%le5)%1e5 

憑借這個遞推你明白:每次相乘都取模。機智的你pia pia寫下以下代碼,卻發現另一個問題:怎么跑不出來?

咱們打工人需要對計算機運行速度和數值有一個大致的概念。循環體中不同操作占用時間不同,所以當你的程序循環次數到達1e6或1e7的時候就需要非常非常小心了。如果循環體邏輯或者運算較多可能非常非常慢。

快速冪探索

機智的小女孩不甘失敗,開始研究其數的規律,將這個公式寫在手上、膀子上、小紙條上。吃飯睡覺都在看:

然后小女孩突然發現其中的奧秘,n次冪可以拆分成一個平方計算后就剩余n/2的次冪了:

現在你已經明白了快速冪是怎么回事,但小女孩可能有點上頭,還是給我講了很多內容:

快速冪實現

至于快速冪已經懂了,我們該怎么實現這個算法呢?

說的不錯,確實有遞歸和非遞歸的實現方式,但是遞歸使用的更多一些。在實現的時候,注意一下奇偶性、停止條件就可以了,奇數問題可以轉換為偶數問題:

  1. 2*2*2*2*2=2 * (2*2*2*2) 奇數問題可以轉化為偶數問題。 

這里,遞歸的解法如下:

  1. long c=10000007; 
  2. public  long divide(long a, long b) { 
  3.         if (b == 0) 
  4.             return 1; 
  5.         else if (b % 2 == 0) //偶數情況 
  6.             return divide((a % c) * (a % c), b / 2) % c; 
  7.     else//奇數情況 
  8.             return a % c * divide((a % c) * (a % c), (b - 1) / 2) % c; 
  9.     } 

非遞歸實現也不難,控制好循環條件即可:

  1. //求 a^b%1000000007 
  2. long c = 1000000007; 
  3. public  long divide(long a, long b) { 
  4.   a %= c; 
  5.   long res = 1; 
  6.   for (; b != 0; b /= 2) { 
  7.     if (b % 2 == 1) 
  8.       res = (res * a) % c; 
  9.     a = (a * a) % c; 
  10.   } 
  11.   return res; 

對于非遞歸你可能有點模糊為啥偶數情況不給res賦值。這里有兩點:

  • 為奇數的情況res僅僅是收集相乘那個時候落單的a
  • 最終b均會降到1,a最終都會和res相乘,不用擔心會漏掉
  • 理想狀態一直是偶數情況,那最后直接獲得a取模的值即可。

如果還是不懂,可以用這個圖來解釋一下:

矩陣快速冪

你以為這就結束了?雖然快速冪主要內容就是以上內容,但是總有很多牛人能夠發現很有趣的規律—矩陣快速冪。如果你沒聽過的話建議仔細看看了解一下。

大家都知道斐波那契數列:的規則:

前幾個斐波那契的數列為:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …

斐波那契從遞推式就可以看出是指數級別的增長,所以稍微多幾個數字就是爆炸式增長,所以很多時候也會要求最后幾位的結果。有了前面模運算公式溢出就不成問題,但n如果非常非常大怎么快速計算就成了一個新的問題。

我們看下面一組公式:

  1. f(n+1) = f(n)   + f(n-1) 
  2. f(n)   = f(n) 

如果拿f(n)和f(n-1)放到一個矩陣中(一行兩列):[f(n+1),f(n)] 能否找到和[f(n),f(n-1)]之間的什么規律呢?

答案是存在規律的,看上面的公式知道:

  1. [f(n+1),f(n)] 
  2. =[f(n)+f(n-1),f(n)] 
  3.  
  4.                  [1  1] 
  5. =[f(n),f(n-1)]  *       
  6.                  [1  0] 
  7.  
  8.                  [1  1] [1   1] 
  9. =[f(n-1),f(n-2)]*      * 
  10.                  [1  0] [1   1]   
  11.  
  12. =·······           

所以現在你可以知道它的規律了吧,這樣一直迭代到f(2),f(1)剛好都為1,所以這個斐波那契的計算為:

而這個矩陣有很多次冪,就可以使用快速冪啦,原理一致,你只需要寫一個矩陣乘法就可以啦,下面提供一個矩陣快速冪求斐波那契第n項的后三位數的模板,可以拿這個去試一試poj3070的題目啦。

  1. public int Fibonacci(int n) 
  2.     { 
  3.         n--;//矩陣為兩項 
  4.         int a[][]= {{1,1},{1,0}};//進行快速冪的矩陣 
  5.         int b[][]={{1,0},{0,1}};//存儲漏單奇數、結果的矩陣,初始為單位矩陣 
  6.         int time=0; 
  7.         while(n>0) 
  8.         { 
  9.             if(n%2==1) 
  10.             { 
  11.                 b=matrixMultiplication(a, b); 
  12.             } 
  13.             a=matrixMultiplication(a, a); 
  14.             n/=2; 
  15.         } 
  16.         return b[0][0]; 
  17.     } 
  18.  public  int [][]matrixMultiplication(int a[][],int b[][]){// 
  19.         int x=a.length;//a[0].length=b.length 為滿足條件 
  20.         int y=b[0].length;//確定每一排有幾個 
  21.         int c[][]=new int [x][y]; 
  22.         for(int i=0;i<x;i++) 
  23.             for(int j=0;j<y;j++) 
  24.             { 
  25.                 //需要確定每一個元素 
  26.                 //c[i][j]; 
  27.                 for(int t=0;t<b.length;t++) 
  28.                 { 
  29.                     c[i][j]+=(a[i][t]%10000)*(b[t][j]%10000); 
  30.                     c[i][j]%=10000; 
  31.                 } 
  32.             } 
  33.         return c; 
  34.     } 

小試牛刀

在力扣(劍指offer16數值的整數次方)上就有一道快速冪的問題,我們用學的東西鞏固一下:

實現 pow(x n) ,即計算 x 的 n 次冪函數(即,x^n)。不得使用庫函數,同時不需要考慮大數問題。

這個簡單題需要考慮一些特殊情況:

  • n正負性
  • 邊界(int最大和最小)

在實現上首先判斷n正負,將負次冪轉成正次冪。如果中轉一層long處理就不會出現這些問題。

  1. class Solution { 
  2.     public double myPow(double x, int n) { 
  3.         if(n==0) 
  4.             return 1; 
  5.         if(n==1) 
  6.             return x; 
  7.         if(n<0){ 
  8.             return (1/x)*myPow((1/x),-(n+1));//不要-n-1會溢出 
  9.         } 
  10.         if(n%2==0) 
  11.             return myPow(x*x,n/2); 
  12.         else 
  13.             return x*myPow(x*x,(n-1)/2); 
  14.     } 

結語

這篇到這里就肝完啦,其實快速冪的內容還不止這么多,尤其是矩陣快速冪,會有著各種巧妙的變形,不過跟數學有一些關系,在力扣上比較少,但是在其他OJ上快速冪題目還是很多的可以自行找一下刷一刷。

是不是看完又get一個小知識!

 

責任編輯:武曉燕 來源: bigsai
相關推薦

2015-06-05 08:43:12

Linux技術人

2024-08-27 13:54:44

2024-12-17 16:44:22

Spring開發

2019-02-27 08:26:06

算法大數據社交

2024-08-07 10:19:00

2015-01-23 10:11:29

2025-01-22 16:00:00

MySQL數據庫Binlog

2023-09-28 09:03:56

開源搜索分析引擎

2022-01-17 10:27:40

TCPIP網絡協議

2023-03-27 08:03:46

ChatGPTMidjourney主角

2020-08-07 16:15:41

開源技術 趨勢

2013-07-30 12:29:19

Google App Google技術Engine

2015-07-20 17:04:34

阿里云小魚在家

2024-02-22 10:36:13

SELECT 語句PostgreSQL數據查詢

2024-09-09 16:30:08

Python編程

2023-09-11 08:01:08

2024-06-04 15:56:48

Task?.NET異步編程

2009-10-21 17:36:36

VB基礎教程

2011-04-15 17:43:15

Google App Google
點贊
收藏

51CTO技術棧公眾號

国产乱人伦偷精品视频免下载| 99精品中文字幕在线不卡 | 成人xxxx视频| 久久久久99精品成人片毛片| 啄木系列成人av电影| 欧美日韩国产成人在线91| 久久久久久久久久久成人| 美女黄色一级视频| 久久精品黄色| 激情亚洲一区二区三区四区| 亚洲一卡二卡三卡| 天堂网在线观看视频| 久久精品99国产国产精| 欧美一级成年大片在线观看 | 日韩成人黄色| 精品一区二区三区影院在线午夜| 久久免费成人精品视频| 永久免费未视频| 色婷婷av一区二区三区丝袜美腿| 日韩一级免费观看| www.色就是色| 蜜桃视频动漫在线播放| 亚洲摸摸操操av| 日韩欧美一区二区三区四区五区 | 97超碰资源站| 亚洲精品乱码| 麻豆国产精品va在线观看不卡| 成人午夜福利一区二区| 久久这里只有精品一区二区| 91精品国产入口| 亚洲一区二区三区四区五区xx| 亚洲v.com| 亚洲韩国一区二区三区| 污污污污污污www网站免费| 国产中文在线| 久久久噜噜噜久噜久久综合| 国产精品亚洲不卡a| 国产精品无码久久av| 美女高潮久久久| 国产精品aaaa| 无码任你躁久久久久久久| 噜噜噜久久,亚洲精品国产品| 日韩免费av| 亚洲天堂开心观看| 黄瓜视频污在线观看| 欧美人与动xxxxz0oz| 亚洲第一av网站| 91传媒理伦片在线观看| 成人在线tv视频| 欧美va在线播放| 波多野结衣三级视频| 日韩中文字幕视频网| 欧美xxx久久| 日本少妇一区二区三区| 无码国模国产在线观看| 欧美大片免费久久精品三p| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 国产女人水真多18毛片18精品视频 | 国产精品美女www爽爽爽| 亚洲黄色成人久久久| 91官网在线| 国产精品卡一卡二卡三| 中文字幕人成一区| 在线看女人毛片| 亚洲va在线va天堂| 日日摸日日碰夜夜爽av| 久久久久久天堂| av中文字幕在线| 国产日韩亚洲欧美综合| 亚洲精品一区二区三区av| 午夜伦全在线观看| 一区二区三区免费在线观看| www精品久久| 午夜精品成人av| 69堂精品视频| 亚洲av成人精品一区二区三区| 亚洲区小说区图片区qvod| 一区二区三区四区精品| 麻豆视频在线免费看| 亚洲激情欧美| 国产精品女主播| www.av日韩| 久久美女艺术照精彩视频福利播放| 亚洲韩国在线| 国产精品vvv| 欧美日韩和欧美的一区二区| 天堂va欧美va亚洲va老司机| 久久久久97| 日韩在线视频免费观看高清中文| 国语对白在线播放| 欧美精品午夜| 国产精品成久久久久三级 | 免费久久精品视频| 高清视频在线观看一区| 国产资源在线看| 亚洲资源中文字幕| 一区二区三区国产免费| 91精品国产乱码久久久竹菊| 尤物yw午夜国产精品视频| 国产一级一片免费播放| 日产欧产美韩系列久久99| 99精品99久久久久久宅男| 国产原创av在线| 亚洲午夜久久久久| 欧美日韩理论片| 欧美精品尤物在线观看| 久久久久一本一区二区青青蜜月 | 免费h视频在线观看| 911精品产国品一二三产区| 菠萝菠萝蜜网站| 亚洲老妇激情| 国产欧美日韩中文字幕在线| 国产精品免费一区二区三区| 日韩精品在线一区二区三区| 国产91丝袜在线播放| 手机成人在线| 中文字幕乱码中文乱码51精品| 91麻豆精品国产91久久久使用方法| jizz欧美性20| 国产一区清纯| 亚洲xxxx视频| 老司机精品影院| 91精品办公室少妇高潮对白| 给我免费观看片在线电影的| 欧美黄在线观看| 成人免费黄色网| 91大神在线网站| 日本二三区不卡| 久久久亚洲av波多野结衣| 国产字幕视频一区二区| 国产精品中文字幕在线| 国产网站在线播放| 狠狠色狠狠色综合日日五| 久久久久久婷婷| 伊人成人网在线看| 福利视频久久| 男女免费观看在线爽爽爽视频| 69精品人人人人| 精品在线观看一区| 久久97超碰国产精品超碰| 亚洲巨乳在线观看| 国产亚洲人成a在线v网站| 一本一本久久a久久精品综合小说 一本一本久久a久久精品牛牛影视 | 色妞欧美日韩在线| 亚洲av无码精品一区二区| 99久久综合狠狠综合久久| 免费毛片网站在线观看| 精品成人自拍视频| 午夜精品久久久久久久白皮肤| 人妻91麻豆一区二区三区| 亚洲国产欧美日韩另类综合| 国产一级免费片| 亚洲三级国产| 久久国产精品99久久久久久丝袜| 美女露胸视频在线观看| 日韩精品在线免费观看视频| 中国一级免费毛片| 国产偷国产偷亚洲高清人白洁 | 性刺激综合网| 亚洲精品tv| 欧美乱大交xxxxx另类电影| 亚洲黄色a级片| 亚洲成人免费在线观看| 瑟瑟视频在线观看| 日本欧美加勒比视频| 自拍偷拍视频在线| 国产精品chinese在线观看| 992tv在线成人免费观看| 国产在线91| 日韩欧美精品一区| 欧美老人xxxx18| 青青草原在线免费观看| 成人国产一区二区三区精品| 免费在线观看的av网站| 99热国内精品| 国产一区在线观| 成人自拍视频网| 蜜月aⅴ免费一区二区三区| 男人天堂一区二区| 欧美性受xxxx黑人xyx| 国产精品白嫩白嫩大学美女| 99国产欧美另类久久久精品| 中文久久久久久| 好看的日韩av电影| 视频一区二区在线观看| 中文无码日韩欧| 国产精品高清在线观看| 欧洲性视频在线播放| 亚洲欧美国产制服动漫| 国产丰满果冻videossex| 黑人欧美xxxx| 九九热视频精品| 日本一区二区高清| 国产原创剧情av| 免费不卡在线观看| 久草热视频在线观看| 国产高清久久| 久久久久久国产精品免费免费| 亚洲一区二区三区久久久| 97福利一区二区| 黄色网页在线播放| 国产一区二区三区在线观看网站| 精品欧美在线观看| 欧美日韩一区二区三区视频 | 91精品91久久久中77777| 久草中文在线视频| 国产精品九色蝌蚪自拍| 成人在线观看视频网站| 九九九在线视频| 91色porny蝌蚪| 无码国产精品久久一区免费| 美女视频网站黄色亚洲| 91精品91久久久中77777老牛| 一区二区免费不卡在线| 日韩欧美在线观看强乱免费| 日韩av不卡一区| 福利精品视频| 深夜福利一区二区三区| 国产专区欧美专区| 97精品国产99久久久久久免费| 91精品国产色综合久久不卡98| av网站在线看| 麻豆成人在线看| 浪潮av一区| 精品国产一区二区三区久久久狼 | 国产精品视频在线观看免费| 一本久久a久久精品亚洲| 国产系列精品av| 一区二区三区国产精品| 日韩福利小视频| 中文字幕一区二区三区av| 久久久久久久毛片| 久久久精品免费网站| mm131美女视频| 久久一区二区视频| 亚洲成人av免费在线观看| 成人高清免费观看| 久久久老熟女一区二区三区91| 国产91精品露脸国语对白| 成人高清在线观看视频| 国产一区二区导航在线播放| 91丨porny丨九色| 国产馆精品极品| 一级黄色电影片| 国产v综合v亚洲欧| 日本一区二区在线观看视频| 成年人网站91| 菠萝菠萝蜜网站| 国产亚洲一二三区| 欧洲性xxxx| 中文字幕在线观看不卡| 黄色一级片在线免费观看| 亚洲一区二区三区四区五区黄| 国产亚洲精品码| 欧美视频一二三| 国产一级片一区二区| 欧美日韩在线三级| 国产高清视频免费观看| 亚洲国产女人aaa毛片在线| 色丁香婷婷综合久久| 亚洲男人天堂网站| 在线激情小视频| 欧美xxxx做受欧美| 国产白浆在线免费观看| 欧美最猛性xxxxx(亚洲精品)| 电影一区二区三区| 成人免费在线视频网址| 男人天堂网视频| 亚洲人metart人体| 欧美日韩不卡在线视频| 久久精品欧洲| 制服丝袜中文字幕第一页| 国产成人精品免费视频网站| 日本xxx在线播放| 中文字幕一区二区三区四区| 久久久久成人网站| 日韩欧美主播在线| 国产精品久久久久久69| 亚洲电影中文字幕| 精品99又大又爽又硬少妇毛片| www.欧美精品一二三区| 超碰97国产精品人人cao| 国产精品第七影院| 136福利精品导航| 日本不卡在线播放| 午夜精品影院| 成人在线观看a| 国产伦精品一区二区三区免费 | www.天堂av.com| 亚洲美女喷白浆| 99在线视频观看| 日韩美女视频在线观看| 欧美三级一区| 免费成人av网站| 午夜天堂精品久久久久| 日本www.色| 不卡视频一二三四| 日本成人精品视频| 欧美日韩在线影院| 精品欧美一区二区精品少妇| 亚洲最新中文字幕| 国产理论在线| 69174成人网| 欧州一区二区| 男人添女人下面高潮视频| 国内外成人在线| xxxxx在线观看| 婷婷六月综合网| 99热这里只有精品3| 在线观看日韩av| 忘忧草在线影院两性视频| 99超碰麻豆| 91九色精品| 韩国视频一区二区三区| 久久久99免费| 国产午夜在线播放| 欧美www视频| 国产美女av在线| 国产美女91呻吟求| 国产va免费精品观看精品视频| 我的公把我弄高潮了视频| 国产精品91xxx| 亚洲国产123| 欧美日韩高清在线播放| 国产高清视频免费最新在线| 91av福利视频| 国产一区二区三区亚洲| 一本色道久久88亚洲精品综合| 久久精品免费观看| 日本午夜精品视频| 欧美三级电影在线看| 国产小视频免费在线观看| 欧美亚洲激情视频| 人妻换人妻仑乱| 99久久精品一区二区| 国产午夜免费视频| 精品国产不卡一区二区三区| 狂野欧美性猛交xxxxx视频| 999精品视频一区二区三区| 亚欧美无遮挡hd高清在线视频| 向日葵污视频在线观看| 中文av一区二区| 一级黄色片网站| 美女999久久久精品视频| 国产一区二区三区黄网站 | 在线成人av| 色综合久久五月| 欧美性猛交xxxx黑人猛交| 日韩精品系列| 国产极品精品在线观看| 日韩欧美自拍| 一级 黄 色 片一| 一区二区三区日韩在线观看| 国产成人精品一区二区无码呦| 欧美激情视频网址| 麻豆精品少妇| 日韩在线第三页| 亚洲图片欧美激情| www久久久久久| 91精品国产成人www| 精品一区在线| 国产成年人视频网站| 樱桃国产成人精品视频| 好吊视频一区二区三区| 奇米四色中文综合久久| 成人看的视频| 少妇欧美激情一区二区三区| 亚洲电影在线播放| 美丽的姑娘在线观看免费动漫| 国产精品视频在线观看| 91精品婷婷色在线观看| 中文字幕乱视频| 在线观看免费亚洲| 性欧美ⅴideo另类hd| 欧美13一14另类| 国产一区二区三区四区五区美女| 国产一级做a爰片在线看免费| 亚洲女人天堂视频| 欧美在线se| 日本www在线视频| 国产精品婷婷午夜在线观看| 亚洲精品成av人片天堂无码| 日本一欧美一欧美一亚洲视频| 国产精品久久天天影视| 欧美 变态 另类 人妖| 欧美情侣在线播放| 99riav视频在线观看| 亚洲欧洲精品在线 | 国产日韩精品一区观看| 日韩avvvv在线播放| 精品99在线观看| 这里只有精品丝袜| 国产精品xxxav免费视频| 亚洲欧美日韩一级| 精品免费在线视频| 八戒八戒神马在线电影| 欧美在线视频一区二区三区| 国产精品一区二区男女羞羞无遮挡 | 欧美精选午夜久久久乱码6080| www555久久|