C 資料結構之二分求冪

2021-08-20 02:28:38 字數 627 閱讀 9102

求a^b的最後三位數表示的整數,0 0表示輸入資料結束,不做處理。

樣例輸入:

2  3

12  6

6789 10000

0 0樣例輸出:8  984   1

思路:分解a的b次方變為a的2^k次的積,並盡可能減少分解結果的個數。在指數層面即分解b為若干個2^k的和。分解b為若干個2^k的和且分解個數最少,即求b的2進製數。求得b的2進製後,各個二進位制位為1的數字所代表的權重即為分解結果。二分求冪大大減少其乘法運算的次數。a^b的後三位只與a的後三位數和b有關,那麼在儲存為計算結果最終值得中間值也只需儲存其後三位。

#includeint main()

b/=2;

a*=a;//求下一位二進位制的權重,a求其平方,即從a的1次,2次,3次~

a%=1000;//求a的後三位

}//一邊計算b的二進位制,一邊計算a的2^k,並將需要的部分累乘到ans

printf("%d\n",ans);

} return 0;

}

即從b的最低位開始依次求得b的各二進位制位,在當前二進位制位為1的情況下將a累乘到變數ans上,在完成本位操作後對a求平方計算下一位二進位制的權重,直到完成b的二進位制轉換。

資料結構之二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成...

資料結構之二分查詢

上面我們介紹了順序查詢,但是它的時間複雜度為o n 讓人很受傷啊,所以有了二分查詢,二分查詢是乙個時間複雜度為o logn 的演算法,當然都是說的一般情況下,二分 二分,看名字就知道它的核心是什麼了,就是不斷地額逼近查詢值。include define max len 20 typedef stru...

資料結構之二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成...