Multiply a Quaternion?

I want to do the equivalent of:

v = Vector3( a, b, c ) * d;

... but for Quaternions. If d<1, I know I can do it with Quaternion.Slerp:

q = Quaternion.Euler( a, b, c );
q2 = Quaternion.Slerp( Quaternion.identity, q, d );

... but if d>1, I can't use that. The only way I can think of at the moment is to multiply the quaternion by itself many times (and then add a slerp for the remaining fraction):

q = Quaternion.Euler( a, b, c );
q2 = Quaternion.identity;
dInt = Mathf.Floor(d);
dRemainder = d - dInt;
for (var a=0;a<dInt;a++) {
   q2 *= q;
}
q2 *= Quaternion.Slerp( Quaternion.identity, q, dRemainder );

But if d==508.4 or something, will that hog a lot of time doing 508 quaternion multiplications and a slerp? I will be doing this every frame (or in FixedUpdate). Is there a simpler way?

You could probably use ToAngleAxis, multiply the angle, then shove both back in using AngleAxis. Why not just do Quaternion.Euler( new Vector3(a, b, c) * d); instead though?

As I understand you want to rotate by quaternion d times, right? Then use:

Quaternion.ToAngleAxis (out angle : float, out axis : Vector3) : void

It will give you angle which you can multiply by d and then construct quaternion from angle and axis again.