Achilles numbers: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (Promote. multiple implementations, no questions) |
(Achilles numbers in FreeBASIC) |
||
Line 317: | Line 317: | ||
Elapsed time: 13.2644 seconds |
Elapsed time: 13.2644 seconds |
||
</pre> |
</pre> |
||
=={{header|FreeBASIC}}== |
|||
<lang freebasic>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</lang> |
|||
{{out}} |
|||
<pre>First 50 Achilles numbers: |
|||
72 108 200 288 392 432 500 648 675 800 |
|||
864 968 972 1125 1152 1323 1352 1372 1568 1800 |
|||
1944 2000 2312 2592 2700 2888 3087 3200 3267 3456 |
|||
3528 3872 3888 4000 4232 4500 4563 4608 5000 5292 |
|||
5324 5400 5408 5488 6075 6125 6272 6728 6912 7200 |
|||
First 20 strong Achilles numbers: |
|||
500 864 1944 2000 2592 3456 5000 10125 10368 12348 |
|||
12500 16875 19652 19773 30375 31104 32000 33275 37044 40500 |
|||
Number of Achilles numbers with: |
|||
2 digits: 1 |
|||
3 digits: 12 |
|||
4 digits: 47 |
|||
5 digits: 192 |
|||
6 digits: 664</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |