を素数、そして一つの解に到達:Cプロジェクトオイラー数は、だから、イム解決の問題10を
int primo(long num){
long pd;
pd = num/2;
while(pd > 1 && num%pd != 0){
pd--;
}
if (pd == 1)
return 1;
else
return -1;}
私のマシンで実行時には、700のようなものだった:プリモがある
acu = 0;
for(i=2;i<=2000000;i++){
if(primo(i)== 1){
acu = acu + i;
}
}
秒。次にコード内でこれを変更します。
int primo(long num){
long pd;
pd = lround(sqrt(num));
while(pd > 1 && num%pd != 0){
pd--;
}
if (pd == 1)
return 1;
else
return -1;}
実行時間は15秒です。 num/2とlround(sqrt(num))の違いは何故ですか? primo
関数の最後の呼び出しの数学的な差があるので
あなたは時間の複雑さの概念を知っている必要があります。最初の方法でプログラムを実行すると複雑さはO(n * n)、2番目の方法ではO(n^3/2)です。 –
なぜnum/2とlround(sqrt(num))の違いが大きいのですか? - > 1000000と1414の差。 – chux
@ sqrtは反復回数を減らしたので、より安価でした。 –