here's my program
Code:
/* miller-rabin */
#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;
bool is_prime(int num, int k,int odd_num,int exp)
{
int i=1,j,x,u;
bool prime=true;
while(prime && i<=k)
{
u = 1 + rand() % num; // generating a random number in the range (1,num-1]
x = fmod(pow(u,odd_num),num);
if(x==1 || x==-1)
{
j = 1;
while((x!=-1 || x!=1) && j<=(f-1))
{
x = fmod(pow(x,2),num);
if(x==1)
{
prime = false;
//break;
}
j++;
}
if(x==-1)
{
prime = false;
//break;
}
}
i++;
}
return (prime);
}
int main()
{
long unsigned int num,odd_num=1,exp=0,k;
bool compo=false;
cout<<"Enter the number: ";
cin>>num;
cout<<"Enter the security parameter: ";
cin>>k;
while(1)
{
odd_num = 1;
while(num-1>=pow(2,exp)*odd_num)// to determine the values of f and a
{
if((num-1)==(pow(2,exp)*odd_num))
{
compo = is_prime(num,k,odd_num,exp);
}
odd_num=odd_num+2;
}
if(compo==true || (pow(2,exp)) > num)
{
cout<<"\n"<<num<<" is composite\n";
break;
}
else if(compo==false)
{
cout<<"\n"<<num<<" is prime\n";
break;
}
exp++;
}
return 0;
}
