void join ( Curve_set const& aOther ) 
 {
   if ( is_circular() && aOther.is_circular() )
   {
     get_circular_rep()->join( *aOther.get_circular_rep() ) ;
   }
   else if ( is_bezier() && aOther.is_bezier() )
   {
     get_bezier_rep()->join( *aOther.get_bezier_rep() ) ;
   }  
 }
 void symmetric_difference( Curve_set const& aOther ) 
 {
   if ( is_circular() && aOther.is_circular() )
   {
     get_circular_rep()->symmetric_difference( *aOther.get_circular_rep() ) ;
   }
   else if ( is_bezier() && aOther.is_bezier() )
   {
     get_bezier_rep()->symmetric_difference( *aOther.get_bezier_rep() ) ;
   }  
 }
 void intersect( Curve_set const& aOther ) 
 {
   if ( is_circular() && aOther.is_circular() )
   {
     get_circular_rep()->intersect( *aOther.get_circular_rep() ) ;
   }
   else if ( is_bezier() && aOther.is_bezier() )
   {
     get_bezier_rep()->intersect( *aOther.get_bezier_rep() ) ;
   }  
 }
unsigned count_circular() {
	char primes[LIMIT];
	unsigned counter = 0;
	int i;
	sieve(primes, LIMIT);
	for (i = 0; i < LIMIT; ++i) {
		if (primes[i] && is_circular(primes, i)) {
			++counter;
		}
	}
	return counter;
}