PowerShell 计算质因数
PowerShell calculating prime factors
我正在尝试编写一个脚本来计算所有小于 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
}
}
}
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
你们都对。我错过了 $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
}
这是我对这个问题的看法 - 这个脚本/函数 returns 数字的因数
优化
- 首先将 2 作为质数处理
- 然后只暴力破解奇数
- 待测因子超过数字的平方根,或剩余商小于数字的平方根时停止
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
我正在尝试编写一个脚本来计算所有小于 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
}
}
}
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
你们都对。我错过了 $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
}
这是我对这个问题的看法 - 这个脚本/函数 returns 数字的因数
优化
- 首先将 2 作为质数处理
- 然后只暴力破解奇数
- 待测因子超过数字的平方根,或剩余商小于数字的平方根时停止
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