C语言用递归算法实现:整数模幂运算 x的r次模p.用循环控制比较简单,但是自己用递归写了个运行时结果不算法思想如下,希望用递归实现:(1) a←x,b←r ,c←1(2)若b=0,则输出c,结束.(3)若b是正的
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/28 19:22:57
![C语言用递归算法实现:整数模幂运算 x的r次模p.用循环控制比较简单,但是自己用递归写了个运行时结果不算法思想如下,希望用递归实现:(1) a←x,b←r ,c←1(2)若b=0,则输出c,结束.(3)若b是正的](/uploads/image/z/5916409-25-9.jpg?t=C%E8%AF%AD%E8%A8%80%E7%94%A8%E9%80%92%E5%BD%92%E7%AE%97%E6%B3%95%E5%AE%9E%E7%8E%B0%EF%BC%9A%E6%95%B4%E6%95%B0%E6%A8%A1%E5%B9%82%E8%BF%90%E7%AE%97+x%E7%9A%84r%E6%AC%A1%E6%A8%A1p.%E7%94%A8%E5%BE%AA%E7%8E%AF%E6%8E%A7%E5%88%B6%E6%AF%94%E8%BE%83%E7%AE%80%E5%8D%95%2C%E4%BD%86%E6%98%AF%E8%87%AA%E5%B7%B1%E7%94%A8%E9%80%92%E5%BD%92%E5%86%99%E4%BA%86%E4%B8%AA%E8%BF%90%E8%A1%8C%E6%97%B6%E7%BB%93%E6%9E%9C%E4%B8%8D%E7%AE%97%E6%B3%95%E6%80%9D%E6%83%B3%E5%A6%82%E4%B8%8B%2C%E5%B8%8C%E6%9C%9B%E7%94%A8%E9%80%92%E5%BD%92%E5%AE%9E%E7%8E%B0%EF%BC%9A%281%29+a%E2%86%90x%2Cb%E2%86%90r+%2Cc%E2%86%901%282%29%E8%8B%A5b%3D0%2C%E5%88%99%E8%BE%93%E5%87%BAc%2C%E7%BB%93%E6%9D%9F%EF%BC%8E%283%29%E8%8B%A5b%E6%98%AF%E6%AD%A3%E7%9A%84)
C语言用递归算法实现:整数模幂运算 x的r次模p.用循环控制比较简单,但是自己用递归写了个运行时结果不算法思想如下,希望用递归实现:(1) a←x,b←r ,c←1(2)若b=0,则输出c,结束.(3)若b是正的
C语言用递归算法实现:整数模幂运算 x的r次模p.用循环控制比较简单,但是自己用递归写了个运行时结果不
算法思想如下,希望用递归实现:
(1) a←x,b←r ,c←1
(2)若b=0,则输出c,结束.
(3)若b是正的偶数,则b← b/2,a ← a2 mod p,转(3)
否则,转(4).
(4) b←b-1,c ←a*c mod p ,转(2).
此方法为数论中的方法,上面描述的问题希望用此方法用递归调用实现,
C语言用递归算法实现:整数模幂运算 x的r次模p.用循环控制比较简单,但是自己用递归写了个运行时结果不算法思想如下,希望用递归实现:(1) a←x,b←r ,c←1(2)若b=0,则输出c,结束.(3)若b是正的
需要输入x,r,p
#include
void Run(int x,int r,int p,int t)
{
int a,b,c;
a=x;b=r;c=t;
if(b==0)
{
printf("%d",c);
return;
}
if((b>0)&&(b%2==0))
{
b=b/2;
a=(a*a)%p;
}
else
{
b=b-1;
c=(a*c)%p;
}
Run(a,b,p,c);
}
void main()
{
int x,r,p,t=1;
printf("please enter x :");
scanf("%d",&x);
printf("please enter r :");
scanf("%d",&r);
printf("please enter p :");
scanf("%d",&p);
Run(x,r,p,t);
}