Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
80
Task/Prime-decomposition/Simula/prime-decomposition.simula
Normal file
80
Task/Prime-decomposition/Simula/prime-decomposition.simula
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
EXTERNAL CLASS BIGNUM;
|
||||
BIGNUM
|
||||
BEGIN
|
||||
|
||||
CLASS TEXTLIST;
|
||||
BEGIN
|
||||
CLASS TEXTARRAY(N); INTEGER N;
|
||||
BEGIN
|
||||
TEXT ARRAY DATA(1:N);
|
||||
END TEXTARRAY;
|
||||
PROCEDURE EXPAND(N); INTEGER N;
|
||||
BEGIN
|
||||
REF(TEXTARRAY) NEWARR;
|
||||
INTEGER I;
|
||||
NEWARR :- NEW TEXTARRAY(N);
|
||||
FOR I := 1 STEP 1 UNTIL SIZE DO BEGIN
|
||||
NEWARR.DATA(I) :- ARR.DATA(I);
|
||||
END;
|
||||
ARR :- NEWARR;
|
||||
END EXPAND;
|
||||
PROCEDURE APPEND(T); TEXT T;
|
||||
BEGIN
|
||||
IF SIZE = ARR.N THEN
|
||||
EXPAND(2*ARR.N);
|
||||
SIZE := SIZE+1;
|
||||
ARR.DATA(SIZE) :- T;
|
||||
END EXPAND;
|
||||
TEXT PROCEDURE GET(I); INTEGER I;
|
||||
GET :- ARR.DATA(I);
|
||||
REF(TEXTARRAY) ARR;
|
||||
INTEGER SIZE;
|
||||
EXPAND(20);
|
||||
END TEXTLIST;
|
||||
|
||||
REF(TEXTLIST) PROCEDURE PRIME_FACTORS(N); TEXT N;
|
||||
BEGIN
|
||||
REF(TEXTLIST) FACTORS;
|
||||
REF(DIVMOD) DM;
|
||||
TEXT P;
|
||||
FACTORS :- NEW TEXTLIST;
|
||||
IF TCMP(N, "1") < 0 THEN
|
||||
GOTO RETURN;
|
||||
P :- "2";
|
||||
FOR DM :- TDIVMOD(N,P) WHILE TISZERO(DM.MOD) DO BEGIN
|
||||
N :- DM.DIV;
|
||||
FACTORS.APPEND(P);
|
||||
END;
|
||||
P :- "3";
|
||||
WHILE TCMP(N,"1") > 0 AND THEN TCMP(TMUL(P,P),N) <= 0 DO BEGIN
|
||||
FOR DM :- TDIVMOD(N, P) WHILE TISZERO(DM.MOD) DO BEGIN
|
||||
N :- DM.DIV;
|
||||
FACTORS.APPEND(P);
|
||||
END;
|
||||
P :- TADD(P,"2");
|
||||
END;
|
||||
IF TCMP(N,"1") > 0 THEN
|
||||
FACTORS.APPEND(N);
|
||||
RETURN:
|
||||
PRIME_FACTORS :- FACTORS;
|
||||
END PRIME_FACTORS;
|
||||
|
||||
REF(TEXTLIST) FACTORS;
|
||||
TEXT INP;
|
||||
INTEGER I;
|
||||
|
||||
FOR INP :- "536870911", "6768768", "1957", "64865899369365843" DO BEGIN
|
||||
FACTORS :- PRIME_FACTORS(INP);
|
||||
OUTTEXT("PRIME FACTORS OF ");
|
||||
OUTTEXT(INP);
|
||||
OUTTEXT(" => [");
|
||||
FOR I := 1 STEP 1 UNTIL FACTORS.SIZE DO BEGIN
|
||||
IF I > 1 THEN
|
||||
OUTTEXT(", ");
|
||||
OUTTEXT(FACTORS.GET(I));
|
||||
END;
|
||||
OUTTEXT("]");
|
||||
OUTIMAGE;
|
||||
END;
|
||||
|
||||
END;
|
||||
Loading…
Add table
Add a link
Reference in a new issue