快速冪(原理,一般,遞迴,位運算演算法)
因為一開始對位運算不是很明白,加上2進位制權值忽然一說像聽了一個新詞,第一次碰見放下了,第二次也,,第三次也,今天就好好把它給看明白。
概念:快速計算底數的n次冪。
例題:(想明白就自己拿出筆紙耐心看下去,自己寫出來的才有自信說看明白了)
求a的b次方;
1,把b轉換成二進位制數。
假設b=11,則b=11的二進位制是1011,則根據 二進位制數第i位的權為 ,
即得:11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1,
即得
2,因此,我們將a¹¹轉化為算
一些位運算的知識:
b & 1//取b二進位制的最低位,判斷和1是否相同,相同返回1,否則返回0,可用於判斷奇偶 b>>1//把b的二進位制右移一位,即去掉其二進位制位的最低位
程式碼各種實現:
常規求冪
int pow1(int a,int b){
int r=1;
while(b--) r*=a;
return r;
}
快速求冪(一般)
int pow2(int a,int b){
int r=1,base=a;
while(b!=0){
if(b%2) r*=base;
base*=base;
b/=2;
}
return r;
}
快速求冪 (遞迴)
int f(int m,int n){ //m^n if(n==1) return m; int temp=f(m,n/2); return (n%2==0 ? 1 : m)*temp*temp; }
快速求冪(位運算)
int pow3(int x,int n){
if(n==0) return 1;
else {
while((n&1)==0){
n>>=1;
x*=x;
}
}
int result=x;
n>>=1;
while(n!=0){
x*=x;
if(n&1) result*=x;
n>>=1;
}
return result;
}
快速求冪(位運算,更簡潔)
int pow4(int a,int b){ int r=1,base=a; while(b){ if(b&1) r*=base; base*=base; b>>=1; } return r; }
快速冪不僅僅有這個,還有快速冪取模,矩陣快速冪,吧啦吧啦,,今天先入門,以後學到了再來新增。
相關推薦
快速冪(原理,一般,遞迴,位運算演算法)
因為一開始對位運算不是很明白,加上2進位制權值忽然一說像聽了一個新詞,第一次碰見放下了,第二次也,,第三次也,今天就好好把它給看明白。 概念:快速計算底數的n次冪。 例題:(想明白就自己拿出筆紙耐心看下去,自己寫出來的才有自信說看明白了) 求a的b次方;
爬蟲實戰(整站爬蟲新浪新聞,並按照遞迴路徑儲存在本地)
新浪網分類資訊爬蟲 爬取新浪網導航頁所有下所有大類、小類、小類裡的子連結,以及子連結頁面的新聞內容。 效果演示圖: items.py import scrapy import sys reload(sys) sys.setdefaultencoding("utf-8"
【LeetCode-面試演算法經典-Java實現】【145-Binary Tree Postorder Traversal(二叉樹非遞迴後序遍歷)】
原題 Given a binary tree, return the postorder traversal of its nodes’ values. For exampl
【leetcode】145Binary Tree Postorder Traversal(二叉樹非遞迴後序遍歷)
二叉樹後序遍歷非遞迴方法很多書和部落格已經講的很清楚啦,這裡就是記錄一下方便自己日後看 基本思路是: 利用棧來實現 先找到最左節點,過程中的節點都入棧 如果該節點沒有右孩子或前一步訪問了右孩子(根據後序遍歷二叉樹的特點可以知道,如果當前節點有右孩子,則訪問當前節點前一定是
斐波那契數列陣列遞推,普通遞迴,記憶化搜尋,矩陣快速冪,和公式法
直接數列遞推推的時候是O(n)的複雜度,查詢的時候是O(1),但是當n很大的時候,陣列空間可能有點力不從心 #include <iostream> #include <cstdio> using namespace std; int fb[4
矩陣快速冪(裸,模板)
題目來源:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1137 【題意】 中文題意不在敘述,只是讓求一個矩陣的乘法而
快速排序C++實現(遞迴,非遞迴)
#include <iostream> #include <vector> #include <stack> using namespace std; int q
分享一小坑,以後碰到了可以快速規避(swagger 對 名稱為 nodeName 的參數報錯)
order error: ror 前臺 屬性 ase solid 1-57 erro ---------------------------------------------------------------------------------踩坑過程:①webapi的
快速冪取模(當數很大時,相乘long long也會超出的解決辦法)
結合 超出 但是 long 數字 也會 連續 return result 當幾個數連續乘最後取模時,可以將每個數字先取模,最後再取模,即%對於*具有結合律。但是如果當用來取模的數本身就很大,采取上述方法就不行了。這個時候可以借鑒快速冪取模的方法,來達到大數相乘取模的效果。
【qduoj - 夏季學期創新題】矩形剖分(遞迴,dp)
題幹: 描述 對一個給定的矩形,將其劃分成儘可能少的正方形,輸出正方形的最少個數。例如,如下圖所示的情況,則輸入為3和4,輸出為4。 輸入 輸入兩個整數中間用空格分開。 輸出 輸出最少分割成的正方形的個數。 輸入樣
矩陣快速冪(共軛函式兩種遞推式)
題目連結:https://cn.vjudge.net/contest/261339#problem/B AC1:ans= x(n)+y(n)*sqrt(6),所以,ans=x(n)+y(n)*sqrt(6)+(x(n)-y(n)*sqrt(6))-(x(n)-y(n)*sqrt(6))=2*
java斐波那契數列(Fibonacci sequence)的三種方式:遞迴,備忘錄,動態規劃
java斐波那契數列(Fibonacci sequence)的三種方式:遞迴,備忘錄,動態規劃 1.最常使用的是遞迴,就是從上往下尋找答案,然後在返回來。 2.備忘錄也是從上往下,只是去掉了遞迴中重複計算的部分,因為它使用一個容器來裝已經計算出的值,這裡就多一個判斷,如果計算過該式子,就直接
圖的深度優先遍歷(非遞迴+遞迴,詳解)
圖的深度優先遍歷 非遞迴演算法: #include<iostream> #include<stack> using namespace std; const int MaxSize=100; class MGraph{//鄰接矩陣的構建 p
【CodeForces - 266C】Below the Diagonal (遞迴,子問題,貪心模擬)
題幹: You are given a square matrix consisting of n rows and n columns. We assume that the rows are numbered from 1 to
快速冪 (二進位制)這個好像一般不會爆掉!!
int poww(int a, int b) { int ans = 1, base = a; while (b != 0) { //如果b的所有位都被踢掉 也就是b不存在了 那麼就沒有指數了 就算不出下去了 也
LeetCode刷題Easy篇斐波那契數列問題(遞迴,尾遞迴,非遞迴和動態規劃解法)
題目 斐波那契數列: f(n)=f(n-1)+f(n-2)(n>2) f(0)=1;f(1)=1; 即有名的兔子繁衍問題 1 1 2 3 5 8 13 21 .... 我的解法 遞迴 public static int Recursion
vue專案搭建(由於是初學者,路由及檔案的放置有些不規範,一般子元件建議放於components下)
1.目錄簡介: 2.設定路由: 1)修改router/index.js檔案 引入元件: import Index from '@/index' import Login from '@/login' 設定路由: routes: [{ path:
圖的深度優先遍歷(鄰接矩陣,遞迴,非遞迴)
參考部落格:圖的深度優先遍歷(遞迴、非遞迴;鄰接表,鄰接矩陣) 本篇預設連通圖,非連通情況會在鄰接表處補上 1.鄰接矩陣的遞迴解法 #include<stdio.h> #define MAX 100 typedef struct { int e[MAX][MA
圖的深度優先遍歷(鄰接表,遞迴,非遞迴)
參考部落格:圖的深度優先遍歷(遞迴、非遞迴;鄰接表,鄰接矩陣) 本程式碼有個問題:就是結點是對應儲存下標的,要解決這個問題,可以增加一個定位函式(LocateVec),不修改也可以使程式碼簡潔些 關於非連通圖的bug已修改,就是增加了dfsTraverse函式迴圈遍歷一遍結點:沒訪問過則再做一次dfs
js實現遞迴,尾遞迴(遞迴優化),防止棧溢位
一、一版的遞迴實現 n!,比如 5!= 5 * 4 * 3 * 2 *1 function fact(n) { if(n == 1) {