移除快速幂的一次额外冗余乘法
  • 板块学术版
  • 楼主hly1204
  • 当前回复10
  • 已保存回复10
  • 发布时间2021/10/4 14:09
  • 上次更新2023/11/4 04:55:00
查看原帖
移除快速幂的一次额外冗余乘法
242973
hly1204楼主2021/10/4 14:09

一个没啥用的东西,我经常写的快速幂是

int pow(int x, int e) {
  int res = 1;
  for (; e; e >>= 1, x *= x)
    if (e & 1) res *= x;
  return res;
}

最后一次的 x *= x 是冗余的,在乘法代价大的时候要避免(其实可以规划一下最优次数?但我不会)

int pow(int x, int e) {
  for (int res = 1;; x *= x) {
    if (e & 1) res *= x;
    if ((e >>= 1) == 0) return res;
  }
}

这样可以在条件判断 if 的次数不变的情况下移除那一次额外的乘法。

2021/10/4 14:09
加载中...