Chowla numbers: Difference between revisions
Content added Content deleted
Catskill549 (talk | contribs) |
(Chowla numbers en FreeBASIC) |
||
Line 785: | Line 785: | ||
8,128 is perfect |
8,128 is perfect |
||
33,550,336 is perfect |
33,550,336 is perfect |
||
</pre> |
|||
=={{header|FreeBASIC}}== |
|||
{{trans|Visual Basic}} |
|||
<lang freebasic> |
|||
' Chowla_numbers |
|||
#include "string.bi" |
|||
Dim Shared As Long limite |
|||
limite = 10000000 |
|||
Dim Shared As Boolean c(limite) |
|||
Dim As Long count, topenumprimo, a |
|||
count = 1 |
|||
topenumprimo = 100 |
|||
Dim As Longint p, k, kk, limitenumperfect |
|||
limitenumperfect = 35000000 |
|||
k = 2: kk = 3 |
|||
Declare Function chowla(Byval n As Longint) As Longint |
|||
Declare Sub sieve(Byval limite As Long, c() As Boolean) |
|||
Function chowla(Byval n As Longint) As Longint |
|||
Dim As Long i, j, r |
|||
i = 2 |
|||
Do While i * i <= n |
|||
j = n \ i |
|||
If n Mod i = 0 Then |
|||
r += i |
|||
If i <> j Then r += j |
|||
End If |
|||
i += 1 |
|||
Loop |
|||
chowla = r |
|||
End Function |
|||
Sub sieve(Byval limite As Long, c() As Boolean) |
|||
Dim As Long i, j |
|||
Redim As Boolean c(limite - 1) |
|||
i = 3 |
|||
Do While i * 3 < limite |
|||
If Not c(i) Then |
|||
If chowla(i) = false Then |
|||
j = 3 * i |
|||
Do While j < limite |
|||
c(j) = true |
|||
j += 2 * i |
|||
Loop |
|||
End If |
|||
End If |
|||
i += 2 |
|||
Loop |
|||
End Sub |
|||
Print "Chowla numbers" |
|||
For a = 1 To 37 |
|||
Print "chowla(" & Trim(Str(a)) & ") = " & Trim(Str(chowla(a))) |
|||
Next a |
|||
' Si chowla(n) = falso and n > 1 Entonces n es primo |
|||
Print: Print "Contando los numeros primos hasta: " |
|||
sieve(limite, c()) |
|||
For a = 3 To limite - 1 Step 2 |
|||
If Not c(a) Then count += 1 |
|||
If a = topenumprimo - 1 Then |
|||
Print Using "########## hay"; topenumprimo; |
|||
Print count |
|||
topenumprimo *= 10 |
|||
End If |
|||
Next a |
|||
' Si chowla(n) = n - 1 and n > 1 Entonces n es un número perfecto |
|||
Print: Print "Buscando numeros perfectos... " |
|||
count = 0 |
|||
Do |
|||
p = k * kk : If p > limitenumperfect Then Exit Do |
|||
If chowla(p) = p - 1 Then |
|||
Print Using "##########,# es un numero perfecto"; p |
|||
count += 1 |
|||
End If |
|||
k = kk + 1 : kk += k |
|||
Loop |
|||
Print: Print "Hay " & count & " numeros perfectos <= " & Format(limitenumperfect, "###############################,#") |
|||
Print: Print "Pulsa una tecla para salir" |
|||
Sleep |
|||
End |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
Chowla numbers |
|||
chowla(1) = 0 |
|||
chowla(2) = 0 |
|||
chowla(3) = 0 |
|||
chowla(4) = 2 |
|||
chowla(5) = 0 |
|||
chowla(6) = 5 |
|||
chowla(7) = 0 |
|||
chowla(8) = 6 |
|||
chowla(9) = 3 |
|||
chowla(10) = 7 |
|||
chowla(11) = 0 |
|||
chowla(12) = 15 |
|||
chowla(13) = 0 |
|||
chowla(14) = 9 |
|||
chowla(15) = 8 |
|||
chowla(16) = 14 |
|||
chowla(17) = 0 |
|||
chowla(18) = 20 |
|||
chowla(19) = 0 |
|||
chowla(20) = 21 |
|||
chowla(21) = 10 |
|||
chowla(22) = 13 |
|||
chowla(23) = 0 |
|||
chowla(24) = 35 |
|||
chowla(25) = 5 |
|||
chowla(26) = 15 |
|||
chowla(27) = 12 |
|||
chowla(28) = 27 |
|||
chowla(29) = 0 |
|||
chowla(30) = 41 |
|||
chowla(31) = 0 |
|||
chowla(32) = 30 |
|||
chowla(33) = 14 |
|||
chowla(34) = 19 |
|||
chowla(35) = 12 |
|||
chowla(36) = 54 |
|||
chowla(37) = 0 |
|||
Contando los numeros primos hasta: |
|||
100 hay 25 |
|||
1000 hay 168 |
|||
10000 hay 1229 |
|||
100000 hay 9592 |
|||
1000000 hay 78498 |
|||
10000000 hay 664579 |
|||
Buscando numeros perfectos... |
|||
6 es un numero perfecto |
|||
28 es un numero perfecto |
|||
496 es un numero perfecto |
|||
8,128 es un numero perfecto |
|||
33,550,336 es un numero perfecto |
|||
Hay 5 numeros perfectos <= 35.000.000 |
|||
Pulsa una tecla para salir |
|||
</pre> |
</pre> |
||