幂取模求怎么错了。。

zhangfeifei89757 2012-04-02 10:12:52
#include<iostream> //幂取模 a^n mod m
#include<conio.h>
/* a,n,m 大的情况 */
using namespace std;
int getmod( int a,int n,int m ) //分治算法
{
int x=getmod(a,n/2,m);
long long ans=((long long )x*x)%m;
if(n%2==1) ans=ans*a%m;
return (int )ans;
}

int main()
{
int a,n,m;
scanf("%d%d%d",&a,&n,&m);
int x=getmod( a, n, m );
printf("%d\n",x);
system("pause");return 0;
}
...全文
190 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ReverseEngineering 2012-04-07
  • 打赏
  • 举报
回复
/2 要多久能等于零?

这不是个好办法!
ReverseEngineering 2012-04-07
  • 打赏
  • 举报
回复
/2 要多久能等于零?

这不是个好办法!
wizard_tiger 2012-04-06
  • 打赏
  • 举报
回复
一楼正解!
七宝 2012-04-06
  • 打赏
  • 举报
回复
目测你的代码有点凌乱,明明用的是C语言却要用C++的头文件。。
还有使用system("pause")是要使用stdlib.h头文件的。使用conio.h头文件是用getch()控制停留的
修改了一下:

#include<stdio.h> //幂取模 a^n mod m
#include<stdlib.h>
/* a,n,m 大的情况 */

int getmod( int a,int n,int m ) //分治算法
{
if(n==0)
return 1;
int x=getmod(a,n/2,m);
long long ans=((long long )x*x)%m;
if(n%2==1) ans=ans*a%m;
return (int )ans;
}

int main()
{
int a,n,m;
scanf("%d%d%d",&a,&n,&m);
int x=getmod( a, n, m );
printf("%d\n",x);
system("pause");
return 0;
}
laomashitu 2012-04-04
  • 打赏
  • 举报
回复
1楼说的正确,鉴定完毕
laomashitu 2012-04-04
  • 打赏
  • 举报
回复
1楼说的正确,鉴定完毕
laomashitu 2012-04-04
  • 打赏
  • 举报
回复
1楼说的正确,鉴定完毕
muyi66 2012-04-03
  • 打赏
  • 举报
回复
递归算法必须要设置好递归出口。你的代码里没有出口,会导致无限递归。
int getmod( int a,int n,int m ) //分治算法  
{
if (n==0) /* 递归出口条件 */
return 1;
int x=getmod(a,n/2,m);
long long ans=((long long )x*x)%m;
if(n%2==1) ans=ans*a%m;
return (int )ans;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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