Function GCD(n As Uinteger, d As Uinteger) As Uinteger Return Iif(d = 0, n, GCD(d, n Mod d)) End Function Function Totient(n As Integer) As Integer Dim As Integer m, tot = 0 For m = 1 To n If GCD(m, n) = 1 Then tot += 1 Next m Return tot End Function Function isPowerful(m As Integer) As Boolean Dim As Integer n = m, f = 2, q, l = Sqr(m) If m <= 1 Then Return false Do q = n/f If (n Mod f) = 0 Then If (m Mod(f*f)) Then Return false n = q If f > n Then Exit Do Else f += 1 If f > l Then If (m Mod (n*n)) Then Return false Exit Do End If End If Loop Return true End Function Function isAchilles(n As Integer) As Boolean If Not isPowerful(n) Then Return false Dim As Integer m = 2, a = m*m Do Do If a = n Then Return false If a > n Then Exit Do a *= m Loop m += 1 a = m*m Loop Until a > n Return true End Function Dim As Integer num, n, i Dim As Single inicio Dim As Double t0 = Timer Print "First 50 Achilles numbers:" num = 0 n = 1 Do If isAchilles(n) Then Print Using "#####"; n; num += 1 If num >= 50 Then Exit Do If (num Mod 10) Then Print Space(3); Else Print End If n += 1 Loop Print !"\n\nFirst 20 strong Achilles numbers:" num = 0 n = 1 Do If isAchilles(n) And isAchilles(Totient(n)) Then Print Using "#####"; n; num += 1 If num >= 20 Then Exit Do If (num Mod 10) Then Print Space(3); Else Print End If n += 1 Loop Print !"\n\nNumber of Achilles numbers with:" For i = 2 To 6 inicio = Fix(10.0 ^ (i-1)) num = 0 For n = inicio To inicio*10-1 If isAchilles(n) Then num += 1 Next n Print i; " digits:"; num Next i Sleep