c·c++/c 프로그래밍

최대약수구하기-순환호출

바로이순간 2012. 9. 19. 19:51

#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