快速冪——二分法/分治法的典型應用

問題

  • 2n2^n的值(n足夠大)

解法:快速冪

  • 當n爲偶數時,2n=2n/22n/22^n=2^{n/2}*2^{n/2}
  • 當n爲奇數時,2n=2[n/2]2[n/2]22^n=2^{[n/2]}*2^{[n/2]}*2

Q:爲什麼選n/2n/2,而不是其他組合
A:當希望是二元組合時,n/2n/2最好,因爲兩個值相同,算一個即可;當希望是m元組合時,可以選n/m。

因此可以用遞歸解決該問題

  • 若題目要求對大素數求餘,可以在算出2n/22^{n/2}return時求餘
int func(int x) // 2^n
{
	if (x==0) return 1;
	int a = func(x/2);
	if (x % 2 == 0) return a * a;
	return a * a * 2;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章