RosettaCodeData/Task/Blum-integer/REXX/blum-integer-1.rexx
2026-04-30 12:34:36 -04:00

59 lines
1.4 KiB
Rexx

include Setting
Say Time()
Call Time 'R'
blumCount = 0
blums.=0
lastDigitCounts.=0
Do number=5 By 4 While blumCount < 400000
Prime=leastPrimeFactor(number)
If Prime // 4=3 Then Do
quotient=number / Prime;
If quotient <> Prime & isPrimeType3(quotient) Then Do
blumCount+=1
If blumCount<=50 Then Do
blums.blumCount=number
End
lastdigit=Right(number,1)
lastDigitCounts.lastdigit+=1
If blumCount=50 Then Do
Say "The first 50 Blum integers:"
Do i=1 To 50
If Right(i,1)=1 Then
l=Format(blums.i,3)
Else
l=l Format(blums.i,3)
If i//10=0 Then
Say l
End
Say ''
End
Else Do
If blumCount=26828 | blumCount // 100000 = 0 Then Do
Say "The " Format(blumCount,7)"th Blum Integer is:" Format(number,7) Time()
If blumCount=400000 Then Do
Say ''
Say "Percent distribution of the first 400000 Blum integers:"
Do i=0 To 9
If lastDigitCounts.i>0 Then
Say Format(lastDigitCounts.i/4000,6,3)'% end in' i
End
End
End
End
End
End
End
Say Time()
say Time('E') 'seconds'
Exit
isPrimeType3: Procedure expose Memo.
Parse Arg number
Return Prime(number) & (number//4=3)
leastPrimeFactor: Procedure expose Memo.
Parse Arg number
Return FFactor(number)
include Math