求教 a的b次方(1<=A,B<=10000)

xxx0624 2012-01-27 02:26:07
C语言
根据二分的思想求解,常规的算法会超时
例如:A*A*A==((A*A)%C)*A
...全文
176 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
elated 2012-01-29
  • 打赏
  • 举报
回复

#b为正整数
def power(a, b):
if b == 1:
return a

remainder = b % 2
half = (b - remainder) / 2
value = power(a, half)
value *= value

if remainder == 1:
value *= a

return value
pp25210 2012-01-27
  • 打赏
  • 举报
回复

#include<iostream>
  using namespace std;
  int f(int a,int b,int n);
  int main()
  {
  cout<<f(19999,2999896,17)<<endl;
  return 0;
  }
  int f(int a,int b,int n)
  {
  if(a<0||b<0||n<0)return -1;
  int binary[32];
  int index=0;
  while(b)
  {
  if(b&1)
  {
  binary[index]=1;
  }
  else
  {
  binary[index]=0;
  }
  index++;
  b>>=1;
  }
  index--;
  int result=1;
  while(index>=0)
  {
  result=(result*result)%n;
  if(binary[index])
  {
  result=(result*a)%n;
  }
  index--;
  }
  return result;
  }

这是我刚刚找到的一个算法,依据《算法导论》(第二版中文版,机械工业出版社出版)第539页的算法来实现,速度非常快。即使是对非常大的参数也是如此
Gloveing 2012-01-27
  • 打赏
  • 举报
回复
大数运算
xxx0624 2012-01-27
  • 打赏
  • 举报
回复
会啊。
jcadre 2012-01-27
  • 打赏
  • 举报
回复
常规想法 for循环啊 不过应该会越界啦。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧