#include <stdio.h>
#include <stdlib.h>
// 자신이외의 약수가 있다면 그 중에서 최대의 약수,
// 자신이외의 약수가 없다면 자신(소수)를 반환하는 함수입니다.
int lpf(int n, int k) {
// k는 약수일 가능성이 있는 수입니다. (1씩 증가합니다)
// 만약 k*k가 n보다 크다면 n은 소수입니다.
// 이 자리에 올때 까지 나주어 지지 않았기 때문에 여기 까지 온 것입니다.
if(k*k>n) return n;
// 만약 n이 k로 나누어 진다면 k와 n/k의 함수값 중에서 최대값을 반환합니다.
if(n%k==0) return max(lpf(k, 2),lpf(n/k,2));
// 만약 n이 k로 나누어 지지 않는 다면 k+1로 시도해 봅니다.
else return lpf(n, k+1);
}
int main() {
int i;
for(i=2;i<1000;++i) printf("%5d", lpf(i, 2));
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
조합의 계산 (0) | 2012.09.19 |
---|---|
부분집합의 합 (0) | 2012.09.19 |
타일클리어 (0) | 2012.09.18 |
파일에서 읽어서 단순 연결리스트 만들기 (0) | 2012.09.16 |
eigenvalue for 3x3 matrix (0) | 2012.08.29 |