Ну тут ничего интересного и красивого – находим простые числа до 200
Решение честно нагуглил
SG6-Primes.ps1
function Test-Prime ($t,$prs) { $isprime = $true foreach ($i in 2..([math]::Sqrt($t))) { if ($t % $i -eq 0) { $isprime = $false break } } if ($isprime) {$prs += $t} $isprime } $Primes = 1,2; @(2;1..200 | where {Test-prime $_ $primes}) | Select @{n="Prime";e={$_}} | Out-GridView
Другие варианты: Mow, Per Østergaard, Scripting Guys, Thomas Lee.









Я был проще – даже решето Эратосфена применять не стал – тупо перебрал – мне машинного времени не жалко
Получилось почти так же коротко, как у тебя, хотя и не столь элегантно…
Комментарий от komatozo — 6.3.2008 @ 10:52
Сделал так:
param([int]$LastNum = 200)
$Primes = ,2
function CheckPrime([int]$Num)
{
$IsPrime = $true;
foreach ($P in $Primes)
{
if ($P -gt [Math]::Sqrt($Num)) {break;}
if (($Num % $P) -eq 0)
{
$IsPrime = $false;
break;
}
}
if ($IsPrime) {$Script:Primes+=$Num}
}
3..$LastNum | ? {($_ % 2) -ne 0} | % {CheckPrime($_)}
“1″
$Primes
Немного эффективнее… Просто недавно писал программки для Project-Euler – так что алгоритм практически один в один оттуда.
Комментарий от Mc'key — 6.3.2008 @ 14:16
Не совсем по теме, но все-таки: избегайте конструкции типа как в примере (не критика, а совет): 2..([math]::Sqrt($t)). По крайней мере, где есть альтернативы. Недостатки этой конструкции: *) реально создает массив из указанного числа элементов (зачем в данном случае?); *) имеет ограничениие на примерно 50000 элементов (почему такое количество, понятия не имею), можете проверить: 2..50003 – ошибка, так что алгоритм не годится в таком варианте для больших чисел.
Комментарий от Roman Kuzmin — 6.3.2008 @ 15:05
2 Roman Kuzmin: Зачем же избегать? Это очень удобная фишка. Да, не очень производительная (из за этого кстати и лимит на 50к
) но скорость работы – не часто является главной задачей скриптов
Комментарий от Xaegr — 6.3.2008 @ 15:07
В ком. строке лаконичность чаще важнее. А вот скрипты должны быть по возможности оптимальны; предела совершенству нет, конечно, но разумные меры можно и нужно применять.
В любом случае, знаю по опыту, что люди рано или поздно встают на эти грабли 2..50003. Почему бы и не предупредить по случаю?
Комментарий от Roman Kuzmin — 6.3.2008 @ 15:18
Ну тут в задаче скрипта было 200 элементов…
Да, конечно оптимальнее и правильнее было бы делать for… а еще лучше писать на ассемблере 
) просто меняю на for
Предупредить конечно полезно – вдруг кто-то не знал, но совсем отказываться тоже не стоит.
Когда на грабли с 50к элементов натыкаюсь (пару раз было
Комментарий от Xaegr — 6.3.2008 @ 15:20