代码效率不高

时间:2015-07-06 05:35:28

标签: c algorithm

这是ProjectEuler中问题12的代码。它给出了正确的输出76576500.但是输出需要很长时间。你能帮助我为此获得更有效的代码吗?谢谢你的评论。 https://projecteuler.net/problem=12

#include <stdio.h>
#include <stdbool.h>

main(){
    bool flag= true;
    int triangular_n , divisor , count , remainder , counter;
    triangular_n=1;
    counter = 2;
    while(flag){
            count = 0;
            divisor = 2;
            while(divisor<triangular_n){
                    remainder = triangular_n%divisor;
                    if(remainder==0){
                            count++;

                    }
                    divisor++;
            }
            if(count==499){
                    break;
            }
            triangular_n += counter;
            counter++;
            printf("%d\n",triangular_n);
    }

    printf("%d\n", triangular_n);

}

1 个答案:

答案 0 :(得分:1)

您可以使用一些技巧来加快速度。

n三角形编号为n*(n+1)/2

对于所有整数nnn+1是共同素数。这意味着n*(n+1)的除数数是除数n乘以n+1的除数数。

对于偶数kk/2的除数数是k的除数的一半。

因此,要计算n三角形数的除数,请计算n+1的除数,乘以前一个n的除数。一步,除以二。