|
- PROGRAM EULER_PHI;
- TYPE LINKED_PTR=^LINK_NODE;
- LINK_NODE=RECORD
- VALUE:INTEGER;
- NEXT:LINKED_PTR;
- END;
- VAR N,M,I,R:INTEGER;VAR NODE,G:LINKED_PTR;
- PROCEDURE PRINTING(PTR:LINKED_PTR);
- VAR P:LINKED_PTR;
- BEGIN
- P:=PTR;
- P:=P^.NEXT;
- R:=R+1;
- WRITE(' ',R,' ',P^.VALUE);
- IF P^.NEXT=NIL THEN EXIT();
- PRINTING(P);
- FREEMEM(P,SIZEOF(LINKED_PTR));
- END;
- PROCEDURE SUCCESSOR(VAR PTR:LINKED_PTR);
- VAR P:LINKED_PTR;
- BEGIN
- IF PTR^.NEXT=NIL THEN BEGIN
- (*CREATE A NEW NODE AND LINK IT TO PREVIOUS ONE*)
- PTR^.NEXT:=ALLOCMEM(SIZEOF(LINK_NODE));
- END;
- P:=PTR^.NEXT;PTR:=P;
- END;
- PROCEDURE ASSIGNMENT(PTR:LINKED_PTR;N:INTEGER);
- VAR K:INTEGER;
- BEGIN
- FOR K:=2 TO N DO
- BEGIN
- SUCCESSOR(PTR);
- END;
- END;
- PROCEDURE TRAVERSE_ELEMENTS(O:LINKED_PTR; VAR Q:LINKED_PTR;K:INTEGER);
- VAR T:INTEGER;
- BEGIN
- FOR T:=2 TO K DO
- BEGIN
- SUCCESSOR(O);
- END;
- Q:=O;
- END;
- BEGIN
- R:=1;
- READLN(N);
- NODE:=ALLOCMEM(SIZEOF(LINK_NODE));
- NODE^.VALUE:=1;
- ASSIGNMENT(NODE,N);
- M:=2;
- WHILE(M<=N) DO
- BEGIN
- TRAVERSE_ELEMENTS(NODE,G,M);
- IF G^.VALUE=0 THEN BEGIN
- I:=M;
- WHILE(I<=N) DO
- BEGIN
- TRAVERSE_ELEMENTS(NODE,G,I);
- IF G^.VALUE=0 THEN G^.VALUE:=I;
- G^.VALUE:=(G^.VALUE DIV M)*(M-1);
- I:=I+M;
- END;
- END;
- M:=M+1;
- END;
- PRINTING(NODE);
- READLN();
- END.
复制代码 |
|