33,007
社区成员
发帖
与我相关
我的任务
分享
#include <iostream.h>
#include <stdio.h>
#include <math.h>
//calculate a (mod b)
int calmod(int a,int b)
{
int q=floor(a/b);
q=a-q*b;
return q;
}
//模重复平方法,输出计算的过程
//calculate b^c(mod m)
int calans(int b,int c,int m)
{
int a=1,i=0;
while(c!=0){
if(c%2==1){
a=calmod(a*b,m);
b=calmod(b*b,m);
printf("(%d) n=1,计算\n",i);
printf(" a=a*b=%d, b=b^2=%d (mod %d)\n",a,b,m);
}
if(c%2==0){
a=calmod(a,m);
b=calmod(b*b,m);
printf("(%d) n=0,计算\n",i);
printf(" a=a=%d, b=b^2=%d (mod %d)\n",a,b,m);
}
c=floor(c/2);
i++;
}
return a;
}
int main()
{
int b,c,m;
cout << "please input b^c (mod m):\nb= ";
cin >> b;
cout << "c= "; cin >>c;
cout << "m= "; cin >>m;
printf("%d^%d=%d (mod %d)\n",b,c,calans(b,c,m),m);
}