2014-04-23 3 views
-1

나는 할 일이있다. 나는 숫자의 모든 정수 제수를 계산하여 표준 출력에 써야합니다. 내 프로그램은 작동하지만 어떤 경우에는 느려지기도합니다. 최적화를 수행하는 방법을 알고 있습니까? 쌍으로 자연수의계산 제수를 최적화하는 방법은 무엇입니까?

#include <cstdio> 
int main() 
{ 
    long n; 
    scanf("%ld", &n); 
    printf("1\n"); 
    for(long i = 2; i <= int(n/2); i++) 
    { 
     if (n % i == 0) 
      printf("%ld\n", i); 
    } 
    printf("%ld", n); 
} 
+0

FYI. 이 유형의 질문은 [코드 검토] (http://codereview.stackexchange.com/)에 더 적합합니다. –

+1

2가 제수라면, 즉시 다른 제수를 말할 수 있습니다. 어느 쪽이 될 것입니까? – gnasher729

+0

@ gnasher729'n/2'? – enedil

답변

3

약수 : 한 쌍의 절반이 i <= sqrt(n)이고 다른 하나는 (n/i) >= sqrt(n)이며, 여기에 코드입니다. 따라서 n/2 대신 n의 제곱근까지 루프를 수행 한 다음 in/i을 모두보고 할 수 있습니다.

[제외 : 당신은 n을 나타 내기 위해 long를 사용하고 있지만, 당신은 intn/2를 캐스팅. sizeof(long) > sizeof(int) 인 플랫폼에서는 정밀도가 떨어집니다.]

관련 문제