这是我用来检查一个随机数是否为素数的脚本:
[int]$nombre = Get-Random -Minimum 1 -Maximum 10
$nombre
$j=0
if($nombre -lt 2) { " $nombre n'est pas premier " }
else {
for($i=1; $i -le $nombre; $i++){
if( $nombre%$i -eq 0) {$j++}
}
if($j -eq 2 ) { "Le nombre est premier "}
else {"Ce nombre est premier"}
}
当我执行这个脚本时,我得到了错误的结果,比如4是一个质数。有什么想法来修复它吗?谢谢
3条答案
按热度按时间yv5phkfx1#
我只是想改进现有的答案。
对我来说,这是如此明显,我不明白为什么没有人指出,它可以简化整个过程,跳过循环,如果数字是一个平方数,只需添加
if ([math]::Sqrt{$number} -is [int]) {$prime = $false}
到代码之前的循环,根据定义,平方数是合数,为什么没有人注意到它?Update:一个基于前面答案的更好的函数,它将$false赋给负数、零、分数和非数字:
}
doinxwow2#
你需要从3开始你的for循环,而不是1。所有的东西都能被1整除,你已经测试过被2除了。
你的代码有很多问题。j计数器是其中之一。循环包括$nombre也是其中之一。
哪个打印
1个错误
2对
3对
4个错误
5对
6个错误
7对
8个错误
9个错误
10个错误
dw1jzc5e3#
下面是另一个代码片段,它显示了1000以内的第一素数。
对于更大的素数,我建议使用拉宾-米勒函数。详细信息请参阅这里:如何通过密码提供程序生成一个大素数?