Chowla numbers: Difference between revisions

m
no edit summary
imported>Wilm
mNo edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1,716:
33,550,336 is perfect
</pre>
=={{header|FreeBASICFortran}}==
{{works with|VAX Fortran|V4.6-244}}
{{libheader|VAX/VMS V4.6}}This compiler implements the Fortran-77 standard. The VAX/VMS operating system runs on simulated hardware using the open source [https://opensimh.org/ opensimh] platform.
{{trans|Ada}}
 
Run time on a Raspberry Pi 4 Model B Rev 1.1 (Raspbian GNU/Linux 10 buster) was 7h 21m
<syntaxhighlight lang="fortran" line="1">
 
PROGRAM CHOWLA
 
CALL PUT_1ST_37
CALL PUT_PRIME
CALL PUT_PERFECT
 
END
 
INTEGER*4 FUNCTION CHOWLA1(N)
 
C The Chowla number of N is the sum of the divisors of N
C excluding unity and N where N is a positive integer
 
IMPLICIT INTEGER*4 (A-Z)
 
IF (N .LE. 0) STOP 'Argument to Chowla function must be > 0'
 
SUM = 0
I = 2
 
100 CONTINUE
IF (I * I .GT. N) GOTO 200
 
IF (MOD(N, I) .NE. 0) GOTO 110
J = N / I
SUM = SUM + I
IF ( I .NE. J) SUM = SUM + J
110 CONTINUE
 
I = I + 1
GOTO 100
 
200 CONTINUE
 
CHOWLA1 = SUM
 
RETURN
 
END
 
SUBROUTINE PUT_1ST_37
IMPLICIT INTEGER*4 (A-Z)
 
DO 100 I = 1, 37
PRINT 900, I, CHOWLA1(I)
100 CONTINUE
 
RETURN
 
900 FORMAT(1H , 'CHOWLA(', I2, ') = ', I2)
 
END
 
SUBROUTINE PUT_PRIME
IMPLICIT INTEGER*4 (A-Z)
PARAMETER LIMIT = 10000000
 
COUNT = 0
POWER = 100
 
DO 200 N = 2, LIMIT
 
IF (CHOWLA1(N) .EQ. 0) COUNT = COUNT + 1
 
IF (MOD(N, POWER) .NE. 0) GOTO 100
 
PRINT 900, COUNT, POWER
POWER = POWER * 10
 
100 CONTINUE
 
200 CONTINUE
 
RETURN
 
900 FORMAT(1H ,'There are ', I12, ' primes < ', I12)
 
END
 
SUBROUTINE PUT_PERFECT
IMPLICIT INTEGER*4 (A-Z)
PARAMETER LIMIT = 35000000
 
COUNT = 0
K = 2
KK = 3
 
100 CONTINUE
 
P = K * KK
 
IF (P .GT. LIMIT) GOTO 300
 
IF (CHOWLA1(P) .NE. P - 1) GOTO 200
PRINT 900, P
COUNT = COUNT + 1
 
200 CONTINUE
 
K = KK + 1
KK = KK + K
 
GOTO 100
 
300 CONTINUE
 
PRINT 910, COUNT, LIMIT
 
RETURN
 
900 FORMAT(1H , I10, ' is a perfect number')
910 FORMAT(1H , 'There are ', I10, ' perfect numbers < ', I10)
 
END
</syntaxhighlight>
{{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
There are 25 primes < 100
There are 168 primes < 1000
There are 1229 primes < 10000
There are 9592 primes < 100000
There are 78498 primes < 1000000
There are 664579 primes < 10000000
6 is a perfect number
28 is a perfect number
496 is a perfect number
8128 is a perfect number
33550336 is a perfect number
There are 5 perfect numbers < 35000000
</pre>
 
== {{header|FreeBASIC}} ==
{{trans|Visual Basic}}
<syntaxhighlight lang="freebasic">
Anonymous user