这是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);
}
〜
答案 0 :(得分:1)
您可以使用一些技巧来加快速度。
n
三角形编号为n*(n+1)/2
。
对于所有整数n
,n
和n+1
是共同素数。这意味着n*(n+1)
的除数数是除数n
乘以n+1
的除数数。
对于偶数k
,k/2
的除数数是k
的除数的一半。
因此,要计算n
三角形数的除数,请计算n+1
的除数,乘以前一个n
的除数。一步,除以二。