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)
如果我使用循环和模数来做这个,我会这样做:
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的幂
| 归档时间: |
|
| 查看次数: |
1025 次 |
| 最近记录: |