Hi! I am having problems with this program, for every odd number it returns the number as prime.

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;
}
thanks in advance