我对臭名昭着的Euler Number 3 C#解决方案的版本

时间:2013-08-01 21:55:27

标签: c#

我为我最近的帖子道歉,我不清楚,做了极少的研究,并违反了一些网站的规则。因此,我正在上传一个实际工作代码的新版本,除了一个问题。我对这段代码的回报是“1”,而不是我要找的结果:“600851475143”的最大因素。这是修订后的,希望更容易理解的代码。我再次非常抱歉违反了网站的政策。

public long Prob_3()
    {
        long a = 600851475143;
        int e = 1;
        for (long i = 0; i < 10; i++)
        {
            if (a % 2 == 0 && a != 1)
            {
                a = a / 2;
            }
            else if (a % 2 != 0 && a % (e + 2) == 0 && a != 1)
            {
                a = a / (e + 2);
            }
            while (a % 2 != 0 && a % (e + 2) != 0 && a != 1)
            {
                e = e + 2;
            }

        }
        return a;
    }

1 个答案:

答案 0 :(得分:1)

您的计划是正确的,但您没有返回600851475143的最重要因素;你在归还它之前就把它分开了!要“修复”您的代码,我所做的就是在Prob_3的正文中添加以下注释行:

long a = 600851475143;
int e = 1;
for (long i = 0; i < 10; i++)
{
    if (a % 2 == 0 && a != 1)
    {
        a = a / 2;
    }
    else if (a % 2 != 0 && a % (e + 2) == 0 && a != 1)
    {
        if (a / (e + 2) == 1) break; // !
        a = a / (e + 2);
    }
    while (a % 2 != 0 && a % (e + 2) != 0 && a != 1)
    {
        e = e + 2;
    }

}
return a;

它的作用仅仅是作为一个基本案例。