有关用C实现密码学中的平方乘算法。

时间:2022-09-25 21:33:02
#include<stdio.h>
int * turntot(int m);
int count=0;
int main()
{
unsigned long a;
int b,m,n,i;
int * p;
scanf("%ld,%d,%d",&a,&m,&n);
p=turntot(m);
b=a;
a=1;
for(i=0;i<count-1;i++,p++)
{
if(*p==1||*p==0)
{
if(*p==1)
{
 —————————————————————————如  printf("%d",*p);
    a=(a*b)%n;
    a=(a*a)%n;
————————————————————————— 如   printf("%ld",a);
}
    else
{    
——————————————————
    a=(a*a)%n;

}
}
}
if(*p==1)
{
————————————————
a=a*b;
}
else
{
——————————————————
       a=a;
}
printf("%ld\n",a%n);

}
int * turntot(int m)
{
int a[10],b[10];
int i=0,j=0,temp;
do
{
temp=m/2;
b[i]=m%2;
m=temp;
count++;
i++;
}while(temp>0);
for(i=count-1;i>=0;i--,j++)
a[j]=b[i];
    return a;
}
题目是计算a的m次方mod n        a,m,n均小于1000
这是我自己写的,运行正确。但是题目要求要输出每一步过程中的结果,所以我就在代码中直线部分添加了printf  用来显示每一步的值。但只要在直线部分一加printf,运行结果就不正确....不知道问题出在哪。
另外一个小问题就是,如果a  mn取值过大  但不超过一千   貌似数值会溢出  想用LONG LONG 数据类型,但我的C版本不支持, 有啥好的解决方法吗   

4 个解决方案

#1


什么?不支持long long 有关用C实现密码学中的平方乘算法。

#2


引用 1 楼 u013163178 的回复:
什么?不支持long long 有关用C实现密码学中的平方乘算法。
就是一种数据类型啊  呵呵   重点其实也不再那啦  

#3


可以用字符串来存储运算结果

#4


因为你用的是c语言所以你在使用printf后,还要给a赋值编译肯定出问题 ,你可以在写个试试 

#1


什么?不支持long long 有关用C实现密码学中的平方乘算法。

#2


引用 1 楼 u013163178 的回复:
什么?不支持long long 有关用C实现密码学中的平方乘算法。
就是一种数据类型啊  呵呵   重点其实也不再那啦  

#3


可以用字符串来存储运算结果

#4


因为你用的是c语言所以你在使用printf后,还要给a赋值编译肯定出问题 ,你可以在写个试试