俄国农民算法(C语言)

//俄国农民算法
#include<stdio.h>
int Right_Left(int g,int x,int p);
int main()
{
 //r=g^x mod p
 int g,x,p;
 printf("The program is to compute r=g^x mod p\n");
 printf("Input the arguments:(form:g,x,p)\n");
 scanf("%d,%d,%d",&g,&x,&p);

 printf("%d^%d mod %d = %d\n",g,x,p,Right_Left(g,x,p));
}
int Right_Left(int g,int x,int p)//大端模式
{
 int r=1;
 int i,e;
 for(i=0;i<32;i++)
  
  e=x&0x0001;
  if(e==0x0001)
   r=(r*g)%p;
  g=(g*g)%p;
  x>>1;  
 }
 return r;
}

int Left_Right(int g,int x,int p)//小端模式
{
 int r=1;
 int i,e;
 for(i=0;i<32;i++)
  
  e=x&0x8000;
  r=(r*r)%p;
  if(e==0x0001)
   r=(r*g)%p;
  
  x<<1;  
 }
 return r;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值