谁能看明白求随机大素数的算法?
这是一个求随机大素数的算法,我看不明白,请大虾指教。
typedef short int byteint[DATALENGTH];
typedef short int mtype[MLENGTH];
mtype Model[TESTNUM];
void LoadInt(byteint A,mtype B)
{
int i,j;
SetZero(A);/*将A置零*/
i=DATALENGTH-1;
j=MLENGTH-1;
while(j>=0)
A[i--]=B[j--];
}
int Prime(byteint Prm)
{
int i,k,ok,cnt=0;
unsigned char flag[400];
byteint A,B,D,buf1,buf2;
while(1){
int pass=0,pass_2=0;
cnt++;
IntRandom(B,MLENGTH); /*随机产生指定长度的奇数,结果放B,MELENGTH为长度*/
printf("\n %3d.try:",cnt);
PrtInt(B); /*显示B*/
IntCpy(Prm,B);/*将B拷贝Prm中*/
Substract(B,ONEVALUE,buf1);/*大整数减,ONEVALUE为1*/
SetMode(buf1,TWOVALUE,buf2,B);/*大整数求余,TWOVALUE为2*/
TransBi(B,flag);/*将B转化为二进制存入flag*/
ok=1;
for(i=0;i<TESTNUM;i++)
{
LoadInt(A,Model[i]);/*见开始定义*/
k=PowerMode(A,Prm,D,flag);/*A的flag次幂对Prm求余,结果放D*/
if(k!=1 && k!=2)
break;
if(k==1)
printf("\n pass the %dth test-----1",pass++);
if(k=2)
{
pass_2=1;
printf("\n pass the %dth test----2",pass++);
}
}
if(ok && pass_2){
printf("\n\n prime found :");
PrtInt(Prm);
return 0;
}
}
}
问题点数:20、回复次数:8Top
1 楼z_sky()回复于 2002-05-30 09:37:29 得分 0
有趣,回头看看Top
2 楼wuyi8808(空间/IV)回复于 2002-05-31 09:08:40 得分 0
gzTop
3 楼phoenixchain(走走看看)回复于 2002-05-31 10:14:21 得分 0
算法没有写全,BUF1和BUF2是什么参数MODEL在社么地方赋值的也没有说明
要想看懂太困难了
Top
4 楼wi_wi(奇奇)回复于 2002-06-01 11:08:21 得分 0
感谢各位关注
不过,有点不好意思,我把一个定理给发出来了,这是一个数学定理,好像还没经过证明,我刚刚找到。
是:a**((b-1)/2)%b,
其中a是随机选取的一个数,b是要检测的数,如果求余结果是1或者b-1则b很可能是素数。
当选择100个不同的a作以上测试且都成功,则b不是素数的几率只有2**(-100),所以可以判定b是素数。Top
5 楼sleepboy_2000(SleepBoy)回复于 2002-06-01 12:15:53 得分 20
同一楼上的公式,但这只是一个不太严格的分析公式,如果用在比较高要求的加密算法里可能会出问题.Top
6 楼lkcowboy(三黑)回复于 2002-06-01 12:28:54 得分 0
gzTop
7 楼wi_wi(奇奇)回复于 2002-06-02 18:39:40 得分 0
同意
结帐Top




