【蒟蒻求助】关于快速幂
  • 板块学术版
  • 楼主李大恕
  • 当前回复20
  • 已保存回复20
  • 发布时间2021/10/9 20:49
  • 上次更新2023/11/4 04:14:35
查看原帖
【蒟蒻求助】关于快速幂
50908
李大恕楼主2021/10/9 20:49

众所周知,快速幂可以这么写:

int power(int a, int b, int p)
{
    if (b == 1)return a;
    int ans = power(a, b / 2, p);
    ans = (long long)ans * ans % p;
    if (b % 2)ans = (long long)ans * a % p;
    return ans;
}

那么,如果我们每次把问题规模缩小到13\frac{1}{3},会不会更快呢?快速幂能不能这样写:

int power(int a, int b, int p)
{
    if (b == 0)return 1;
    if (b == 1)return a;
    int ans = power(a, b / 3, p);
    ans = (unsigned long long)(ans * ans % p) * ans % p;
    if (b % 3 == 1)ans = (unsigned long long)ans * a % p;
    else if (b % 3 == 2)ans = (unsigned long long)(ans * a % p) * a % p;
    return ans;
}

求助大佬

2021/10/9 20:49
加载中...