Jump to content

Chowla numbers: Difference between revisions

(→‎{{header|zkl}}: added code)
(→‎=={{header|PowerBASIC}}==: PowerBASIC added)
Line 697:
33,550,336
</pre>
 
=={{header|PowerBASIC}}==
{{trans|Visual Basic .NET}}
<lang powerbasic>#COMPILE EXE
#DIM ALL
#COMPILER PBCC 6
 
FUNCTION chowla(BYVAL n AS LONG) AS LONG
REGISTER i AS LONG, j AS LONG
LOCAL r AS LONG
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
END IF
INCR i
LOOP
FUNCTION = r
END FUNCTION
 
FUNCTION chowla1(BYVAL n AS QUAD) AS QUAD
LOCAL i, j, r AS QUAD
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
END IF
INCR i
LOOP
FUNCTION = r
END FUNCTION
 
SUB sieve(BYVAL limit AS LONG, BYREF c() AS INTEGER)
LOCAL i, j AS LONG
REDIM c(limit - 1)
i = 3
DO WHILE i * 3 < limit
IF NOT c(i) THEN
IF chowla(i) = 0 THEN
j = 3 * i
DO WHILE j < limit
c(j) = -1
j += 2 * i
LOOP
END IF
END IF
i += 2
LOOP
END SUB
 
FUNCTION PBMAIN () AS LONG
LOCAL i, count, limit, power AS LONG
LOCAL c() AS INTEGER
LOCAL s AS STRING
LOCAL s30 AS STRING * 30
LOCAL p, k, kk, r, ql AS QUAD
FOR i = 1 TO 37
s = "chowla(" & TRIM$(STR$(i)) & ") = " & TRIM$(STR$(chowla(i)))
CON.PRINT s
NEXT i
count = 1
limit = 10000000
power = 100
CALL sieve(limit, c())
FOR i = 3 TO limit - 1 STEP 2
IF ISFALSE c(i) THEN count += 1
IF i = power - 1 THEN
RSET s30 = FORMAT$(power, "#,##0")
s = "Count of primes up to " & s30 & " =" & STR$(count)
CON.PRINT s
power *= 10
END IF
NEXT i
 
ql = 2 ^ 61
k = 2: kk = 3
RESET count
DO
p = k * kk : IF p > ql THEN EXIT DO
IF chowla1(p) = p - 1 THEN
RSET s30 = FORMAT$(p, "#,##0")
s = s30 & " is a number that is perfect"
CON.PRINT s
count += 1
END IF
k = kk + 1 : kk += k
LOOP
s = "There are" & STR$(count) & " perfect numbers <= " & FORMAT$(ql, "#,##0")
CON.PRINT s
 
CON.PRINT "press any key to exit program"
CON.WAITKEY$
END FUNCTION</lang>
{{out}}
<pre>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
Count of primes up to 100 = 25
Count of primes up to 1,000 = 168
Count of primes up to 10,000 = 1229
Count of primes up to 100,000 = 9592
Count of primes up to 1,000,000 = 78498
Count of primes up to 10,000,000 = 664579
6 is a number that is perfect
28 is a number that is perfect
496 is a number that is perfect
8,128 is a number that is perfect
33,550,336 is a number that is perfect
8,589,869,056 is a number that is perfect
137,438,691,328 is a number that is perfect
2,305,843,008,139,952,130 is a number that is perfect
There are 8 perfect numbers <= 2,305,843,009,213,693,950
press any key to exit program</pre>
 
=={{header|Python}}==
Cookies help us deliver our services. By using our services, you agree to our use of cookies.