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