Private Function GCD(ByRef nPHI As Double) As
Double
Dim x As Double
Dim nE, y As Double
Const N_UP As Integer = 99999999 'set upper limit for E
Const N_LW As Integer = 10000000 'set lower limit for E
On Error Resume Next
Randomize()
nE = Int((N_UP - N_LW + 1) * Rnd() + N_LW)
Do
x = nPHI Mod nE
y = x Mod nE
If y <> 0 And IsPrime(nE) Then
GCD = nE
Exit Function
Else
nE = nE + 1
End If
Loop
End Function
private double GCD(double nPHI)
{
double x;
double nE,y;
const int N_UP = 99999999; //set upper limit for E
const int N_LW = 10000000;
//set lower limit for E
nE
= Convert.ToInt64((N_UP - N_LW + 1) * _
(new Random()).NextDouble() + N_LW);
while(true)
{
x = nPHI % nE;
y = x % nE;
if (y != 0 && IsPrime(nE))
{
return nE;
}
else
{
nE++;
}
}
}
Private Function Euler(ByRef E3 As Double,
ByRef PHI3 As Double) As Double
On Error Resume Next
Dim v3, v1, u2, u1, u3, v2, q As Double
Dim vv, z, t2, t1, t3, uu, inverse As Double
u1 = 1
u2 = 0
u3 = PHI3
v1 = 0
v2 = 1
v3 = E3
Do Until (v3 = 0)
q = Int(u3 / v3)
t1 = u1 - q * v1
t2 = u2 - q * v2
t3 = u3 - q * v3
u1 = v1
u2 = v2
u3 = v3
v1 = t1
v2 = t2
v3 = t3
z = 1
Loop
uu = u1
vv = u2
If (vv < 0) Then
inverse = vv + PHI3
Else
inverse = vv
End If
Euler = inverse
End
Function