Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
100
Task/Long-primes/XBasic/long-primes.basic
Normal file
100
Task/Long-primes/XBasic/long-primes.basic
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
PROGRAM "longprimes"
|
||||
VERSION "0.0002"
|
||||
|
||||
DECLARE FUNCTION Entry()
|
||||
INTERNAL FUNCTION Sieve(limit&, primes&[], count%)
|
||||
INTERNAL FUNCTION FindPeriod(n&)
|
||||
|
||||
FUNCTION Entry()
|
||||
DIM numbers&[7]
|
||||
numbers&[0] = 500
|
||||
numbers&[1] = 1000
|
||||
numbers&[2] = 2000
|
||||
numbers&[3] = 4000
|
||||
numbers&[4] = 8000
|
||||
numbers&[5] = 16000
|
||||
numbers&[6] = 32000
|
||||
numbers&[7] = 64000
|
||||
numberUpperBound% = UBOUND(numbers&[])
|
||||
DIM totals%[numberUpperBound%]
|
||||
DIM primes&[6499]
|
||||
PRINT "Please wait."
|
||||
PRINT
|
||||
Sieve(64000, @primes&[], @primeCount%)
|
||||
DIM longPrimes&[primeCount% - 1] ' Surely longCount% < primeCount%
|
||||
longCount% = 0
|
||||
FOR i% = 0 TO primeCount% - 1
|
||||
prime& = primes&[i%]
|
||||
IF FindPeriod(prime&) = prime& - 1 THEN
|
||||
longPrimes&[longCount%] = prime&
|
||||
INC longCount%
|
||||
END IF
|
||||
NEXT i%
|
||||
count% = 0
|
||||
index% = 0
|
||||
FOR i% = 0 TO longCount% - 1
|
||||
IF longPrimes&[i%] > numbers&[index%] THEN
|
||||
totals%[index%] = count%
|
||||
INC index%
|
||||
END IF
|
||||
INC count%
|
||||
NEXT i%
|
||||
totals%[numberUpperBound%] = count%
|
||||
PRINT "The long primes up to"; numbers&[0]; " are:"
|
||||
PRINT "[";
|
||||
FOR i% = 0 TO totals%[0] - 2
|
||||
PRINT STRING$(longPrimes&[i%]); " ";
|
||||
NEXT i%
|
||||
IF totals%[0] > 0 THEN
|
||||
PRINT STRING$(longPrimes&[totals%[0] - 1]);
|
||||
END IF
|
||||
PRINT "]"
|
||||
PRINT
|
||||
PRINT "The number of long primes up to:"
|
||||
FOR i% = 0 TO numberUpperBound%
|
||||
PRINT FORMAT$(" #####", numbers&[i%]); " is"; totals%[i%]
|
||||
NEXT i%
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION Sieve(limit&, primes&[], count%)
|
||||
DIM c@[limit&]
|
||||
FOR i& = 0 TO limit&
|
||||
c@[i&] = 0
|
||||
NEXT i&
|
||||
' No need to process even numbers
|
||||
p% = 3
|
||||
n% = 0
|
||||
p2& = p% * p%
|
||||
DO WHILE p2& <= limit&
|
||||
FOR i& = p2& TO limit& STEP 2 * p%
|
||||
c@[i&] = 1
|
||||
NEXT i&
|
||||
DO
|
||||
p% = p% + 2
|
||||
LOOP UNTIL !c@[p%]
|
||||
p2& = p% * p%
|
||||
LOOP
|
||||
FOR i& = 3 TO limit& STEP 2
|
||||
IFZ c@[i&] THEN
|
||||
primes&[n%] = i&
|
||||
INC n%
|
||||
END IF
|
||||
NEXT i&
|
||||
count% = n%
|
||||
END FUNCTION
|
||||
|
||||
' Finds the period of the reciprocal of n&
|
||||
FUNCTION FindPeriod(n&)
|
||||
r& = 1
|
||||
period& = 0
|
||||
FOR i& = 1 TO n& + 1
|
||||
r& = (10 * r&) MOD n&
|
||||
NEXT i&
|
||||
rr& = r&
|
||||
DO
|
||||
r& = (10 * r&) MOD n&
|
||||
INC period&
|
||||
LOOP UNTIL r& = rr&
|
||||
END FUNCTION period&
|
||||
|
||||
END PROGRAM
|
||||
Loading…
Add table
Add a link
Reference in a new issue