PowerShell计算素因子

问题描述 投票:0回答:3

我正在尝试编写一个脚本来计算所有低于X的数字的素数因子(在这个例子中为100万)。代码非常简单,我觉得很容易理解,但我似乎无法找出它为什么不起作用。

where ($number -lt 1000000) {
    where ($number2 -lt $number) {
       if (($number % $number2) -eq 0) {
            Write-Host number $number prime $number2 >> C:\workspace\output.txt
        }
    }
}
powershell
3个回答
0
投票
where ($number -lt 1000000) {
    where ($number2 -lt $number) {
       if (($number % $number2) -eq 0) {
            Write-Host number $number prime $number2 >> C:\workspace\output.txt
        }
        $number++
    }
}

你需要在循环中增加$ number


0
投票

你们都是对的。我错过了$number = $number + 1。几小时后我才弄清楚了。

#setup
$number = 1
$number2 = 1

while ($number -le 1000000)
{
    while ($number2 -le $number)
    {
        if (($number % $number2) -eq 0)
        {
            Write-Host $number and $number2
        }
        $number2 = $number2 + 1
    }
    $number2 = 1
    $number = $number + 1
}

0
投票

这是我对问题的看法 - 这个脚本/函数返回数字的因子

优化

  1. 首先处理2作为首要问题
  2. 然后只有蛮力奇数
  3. 当要测试的因子超过数字的平方根,或者剩余商小于数字的平方根时停止
Function Factorise {
    PARAM ($Number)

    $MaxFactor = [math]::Sqrt($Number)

    #take care of 2 as a factor
    $Factor=2
    while ( ($Number % $Factor) -eq 0) {
        $Factor
        $Number=$Number/$Factor
    }

    #then brute force all odd numbers as factors up to max prime
    #while $Number remains greater than max prime
    $Factor=3
    while ($Factor -le $MaxFactor -and $number -ge $MaxFactor) {
        while ( ($Number % $Factor) -eq 0) {
            $Factor
            $Number=$Number/$Factor
        }
        $Factor+=2
    }
    $Number
}

样本输出

Factorise 32770
2
5
29
113
© www.soinside.com 2019 - 2024. All rights reserved.