C#模数最大的素数因子?

Qco*_*com 0 c# for-loop if-statement prime-factoring

我想知道是否有可能通过在C#中使用模数来找到数字的最大素数因子.换句话说,如果i % x == 0那时我们可以打破一个for循环或类似的东西,其中x等于低于我们的i值的所有自然数.

我如何指定all natural numbers below our i value等于我们的x变量?如果你知道我在说什么,写出每个整数的条件变得有点乏味.

顺便说一句,我敢肯定有一个更简单的方法在C#中要做到这一点,所以请让我知道,如果你有一个想法,但我也想尝试解决这种方式,只是为了看看如果我能用我的初学者知识做到这一点.

这是我目前的代码,如果你想看到我到目前为止:

static void Main()
{
    int largestPrimeFactor = 0;

    for (long i = 98739853; i <= 98739853; i--)
    {
        if (true)
        {
            largestPrimeFactor += (int) i;
            break;
        }
    }

    Console.WriteLine(largestPrimeFactor);
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

Ich*_*ann 6

如果我使用循环和模数来做这个,我会这样做:

long number = 98739853;
long biggestdiv = number;

while(number%2==0) //get rid of even numbers
    number/=2;

long divisor = 3;

if(number!=1)
while(divisor!=number)
{
    while(number%divisor==0)
    {
        number/=divisor;
        biggestdiv = divisor;
    }

    divisor+=2;
}
Run Code Online (Sandbox Code Playgroud)

最终,biggestdiv 将是最大的主要因素.

注意:此代码直接在浏览器中编写.我没有尝试编译或运行它.这仅用于展示我的概念.可能存在算法错误.他们是,让我知道.我知道它根本没有优化(我认为Sieve是最好的).

编辑:
修复:以前的代码将在number素数时返回1 .
固定:前面的代码将结束在循环导致的溢流divisor,其中number分别为2的幂