//使用整型的数组,模拟的二进制的大整数
int RabinMiller(const BigInt mayPrim)
{
BigInt bigNum1;
BigInt mayPrimSub1;
BigInt result;
BigInt base, tempBase;
int i = 0, j =0, length =0;
SetZero(base); SetZero(bigNum1); SetZero(tempBase);
SetZero(mayPrimSub1); SetZero(result);
IntConvertToBig(1, bigNum1);
Sub(mayPrim, bigNum1, mayPrimSub1);
length =GetLength(mayPrim);
for ( i =1; i <= 5; i++ ) {
printf("/nmiller %d/n", i);
do {//随机选择base
for ( j =0; j < gMaxLength; j++ ) {
tempBase[j] =rand()%2;
}
Mod(tempBase, mayPrimSub1, base);
} while ( Cmp(mayPrimSub1, base) != 1 );
PowerMod(base, mayPrimSub1, mayPrim, result);//a^bmodn
if ( Cmp(bigNum1, result) ) {//比较两个数的大小,默认的返回,和库一样
printf("rabin miller failed/n");
return 0;
}
}
OutPut(mayPrim);
printf("rabin miller succeed/n");
return 1;
}