SAS/SAS 질문과 답변

소인수분해

이슈카 2016. 2. 21. 12:51

소인수분해에 대한 코드를 짜려고 하는데 좀 도와주세요...

어떤 수에 대해서 그 수가 소수가 아니면 NOTE = 'COMPOSITE',

소수이면 NOTE = 'PRIME' 이라고 출력한 다음에 DO WHILE 문을 이용해서 소인수분해를 하려고 합니다.


DATA PRIME;

INPUT X;

CARDS;

22680

;


DATA LOOP;

SET PRIME;

LENGTH NOTE $ 16;

DO K = 2 TO X WHILE(MOD(X, K) = 0);

X = X / K; OUTPUT;

IF MOD(X, K) = 0 THEN K = 2;

END;

IF X = K THEN NOTE = 'PRIME NUMBER';

ELSE DO;

NOTE = 'COMPOSITE NUMBER';

END;


PROC PRINT DATA=LOOP;

RUN;




일단 제가 짠대로 실행하면 이런 결과가 나옵니다.

6번째에서 4를 2 * 2 로 분해하는 문제와 7번째에 7을 나눠줘야하는 문제가 남아있는데 어떻게 해야할지 모르겠습니다 도와주세요


 

================================================================================
DATA PRIME;
INPUT X;
CARDS;
22680
;

DATA LOOP;
SET PRIME;
LENGTH NOTE $ 16;
k=2;

do while(k<=x);

IF X = K THEN NOTE = "PRIME NUMBER";
ELSE NOTE = "COMPOSITE NUMBER";

if mod(x,k)=0 then do; 
x=x/k;output;
end;
else k=k+1;

end;
run;

PROC PRINT DATA=LOOP;
RUN;