求解 (X^Y) mod Z=??

zqfleaf 2003-05-27 08:31:09
求余数如:
15 mod 8 = 7

当 X 、Y 很大时,上面公式有没有什么算法简化一下,能够在计算机正常的计算范围内,X、Y、Z<1000
...全文
146 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmmcd 2003-05-27
  • 打赏
  • 举报
回复
先把n化成二进制,对于每个不为零的位...

int mod(int a,int n,int b)
{
int x=1,t;
t=a;
while(n)
{
if(n%2)
{
x=(x*t)%b
}
n/=2;
t=(t*t)%b;
}
return x;
}
BlueSky2008 2003-05-27
  • 打赏
  • 举报
回复
提问前请搜索一下旧帖:
http://expert.csdn.net/Expert/TopicView1.asp?id=1787055
eion 2003-05-27
  • 打赏
  • 举报
回复
X^Y mod Z
= (X%Z)^Y mod Z
= ((((X%Z) * X )%z *X) %z * X)%Z ....

这样就不会溢出了

int ans = 1;
int X, Y, Z;
cin >> X >> Y >> Z;

for (int i=0; i<Y; i++)
{
ans = (ans * X) % Z;
}

cout << " (X^Y) mod Z = " << ans << endl;
HUNTON 2003-05-27
  • 打赏
  • 举报
回复
(X^Y) mod Z =[(X mod Z ) ^ Y] mod Z 这样应该可以简便一些了吧

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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