RosettaCodeData/Task/Partition-an-integer-x-into-n-primes/BASIC/partition-an-integer-x-into-n-primes.basic
2025-06-11 20:16:52 -04:00

33 lines
984 B
Text

10 DIM P%(13000),PR(30),I%(50),N(50),NP%(50),CP(50): MP=99809!
20 FOR P=2 TO SQR(MP)
30 PRINT CHR$(13);"Sieving... ";P;
40 FOR C=P*P TO MP STEP P
50 B=FIX(C/8): V=C-B*8
60 P%(B) = P%(B) OR 2^V
70 NEXT C,P
80 PRINT CHR$(13);"Sieving done "
90 READ N,NP%
100 IF N=0 THEN END
110 PRINT:PRINT "Partitioning";N;"with";NP%;"primes:"
120 S=1: N(0)=N: NP%(0)=NP%: I%(0)=1: CP(0)=1
130 IF S=0 THEN PRINT CHR$(13);"Impossible":GOTO 90
140 S=S-1: N=N(S): NP%=NP%(S): I%=I%(S): CP=CP(S)
150 CP=CP+1
160 B=FIX(CP/8):V=CP-B*8
170 IF P%(B) AND 2^V GOTO 150
175 PRINT CHR$(13);"@";CP;
180 IF N<CP GOTO 130
190 IF NP%=1 THEN 240
200 PR(I%)=CP
210 CP(S)=CP
220 N(S+1)=N-CP: NP%(S+1)=NP%-1: CP(S+1)=CP: I%(S+1)=I%+1: S=S+2
230 GOTO 130
240 B=FIX(N/8):V=N-B*8
250 IF P%(B) AND 2^V GOTO 130
260 PR(I%)=N
270 PRINT CHR$(13);PR(1);
280 FOR J%=2 TO I%: PRINT "+";PR(J%);: NEXT J%
290 PRINT
300 GOTO 90
310 DATA 99809,1, 18,2, 19,3, 20,4, 2017,24
320 DATA 22699,1, 22699,2, 22688,3, 22699,4, 40355,3, 0,0