0

数値 104751475143 が 1 秒未満で計算され、数値 251475141 がより長い時間かかる理由を誰か教えてもらえますか? コードは最大の因数を見つけようとしています。

これは私のコードです。

    long long lrgPFactor = 0;
    long long currentfactor = 0;
    long long tempfactor = 0;
    long long Number =  251475141;
    long long factor = 0;


    switch ((long long)sqrt(Number)%2) //skipping to the square root of the number to save time
{ 
    case 0: factor=((long long)sqrt(Number)-1); break; //If even make it odd
    default: factor=((long long)sqrt(Number)); break; //If odd leave it
}
    while (factor > 0) 
{
        if (Number % factor == 0) //if factor is a factor
       {
            factor=Number/factor; //make the factor the larger of the pair
        switch ((long long)sqrt(factor)%2) //same as above
            { 
                case 0: tempfactor=((long long)sqrt(factor)-1); break; 
                default: tempfactor=((long long)sqrt(factor)); break; 
            }  
            for (tempfactor = factor - 1; tempfactor > 1; --tempfactor) //simple way to determine if prime
            {
            if (factor % tempfactor == 0)
                    break;
            }
            if (tempfactor == 1)
            {
               lrgPFactor = factor;
               break;
           }
        }
        factor -= 2;
}
4

1 に答える 1

1

104751475143 の素因数は 391751 であり、3 (3=251475141/83825047) よりも 104751475143 の平方根に近い 104751475143/391751=267393 が 251475151 の平方根に近いため、時間がかかります。ループの繰り返し。

于 2013-05-20T05:36:06.563 に答える