一道C语言题目

来源:百度知道 编辑:UC知道 时间:2024/05/17 09:03:51
#include"stdio.h"
#include"stdlib.h"
#include"math.h"
int composite=0;
/*计算a^p mod n ,并在计算过程中实施对n的二次试探*/
int power(int a,int p,int n)
{
int x,result;
if (p==0)
result=1;
else
{
x=power(a,p/2,n);
result=(x*x)%n;
if ((result==1)&&(x!=1)&&(x!=n-1))
composite=1;
if ((p%2)==1)
result=(result*a)%n;
}
return result;
}

/*重复K次调用的Prime的蒙特卡罗算法primeMC
PrimeMC的出错概率不超过(1/4)^K,K越大,正确的概率越高*/
int primeMC(int n,int k)
{
int i,a,result;
composite=0;
for (i=1;i<=k;i++)
{
a=random(n-3)+2;
result=power(a,n-1,n);
if ((composite==1)||(result!=1))
return 0;
}
return 1;
}

void main()
{int n=5;
clrscr();
printf("2\n");
printf("3\n");
while(getch()!=27){
int k=(double)floor(log(n)/log(2));
if (primeMC(n,k)) printf("%d\n&q

#include"stdio.h"
#include"stdlib.h"
#include"math.h"
int composite=0;
/*计算a^p mod n ,并在计算过程中实施对n的二次试探*/
int power(int a,int p,int n)
{
int x,result;
if (p==0)
result=1;
else
{
x=power(a,p/2,n);
result=(x*x)%n;
if ((result==1)&&(x!=1)&&(x!=n-1))
composite=1;
if ((p%2)==1)
result=(result*a)%n;
}
return result;
}

/*重复K次调用的Prime的蒙特卡罗算法primeMC
PrimeMC的出错概率不超过(¼)^K,K越大,正确的概率越高*/
int primeMC(int n,int k)
{
int i,a,result;
composite=0;
for (i=1;i<=k;i++)
{
a=random(n-3)+2;
result=power(a,n-1,n);
if ((composite==1)||(result!=1))
return 0;
}
return 1;
}

void main()
{int n=5;
clrscr();
printf("2\n");
printf("3\n");
while(getch()!=27){
int k=(double)floor(log(n)/log(2));
if (primeMC(n,k)) printf("%d