2015-01-31 5 views
0

를이 내 스크립트되어 사용 소수 인 경우 확인 임의의 숫자가 소수인지 아닌지 숫자가 확인 PowerShell을

[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처럼 잘못된 결과를 얻을 스크립트를 실행

은 소수이다. 그것을 고칠 어떤 아이디어? 당신이

답변

0

당신은 3에서 루프 당신을 시작할 필요가 감사하지 1. 모든 일에 의해 나누어, 당신은 이미 당신의 코드를 잘못 여러 가지가 있습니다 2.

으로 나누기 테스트. j 카운터가 그 중 하나입니다. $ nombre를 포함한 루핑 또한 하나입니다.

1 거짓 인쇄

function Test-Prime { 
    param(
     [Parameter(ValueFromPipeline=$true)] 
     [int]$number 
     ) 

    Process { 
     $prime = $true; 

     if ($number -eq 1) { 
      $prime = $false; 
     } 
     if ($number -gt 3) { 
      # limit loop to max sqrt($number) 
      $sqrt = [math]::Sqrt($number); 
      for($i = 2; $i -le $sqrt; $i++) { 
       if ($number % $i -eq 0) { 
        # we found it is not prime 
        $prime = $false; 
        break; 
       } 
      } 
     } 

     return $prime; 
    } 
} 

# test for all values between 1 and 100 
1..10 | %{ Write-Host " $_ $(Test-Prime $_)" } 


2 참
3 트루
4 거짓
5 트루
6 거짓
7 트루
8 거짓
9 거짓
10 거짓

+1

왜 주석을 쓰는 대신 제곱근을 추가하는 것이 좋을까요? 그것은 당신을 위해 동일한 시간이 걸립니다. :) 또한, -lt $ number - 1을 -lt $ number로 대체해야합니다. 다음은 제곱근 수정입니다 :'$ sqrt = [int] ([math] :: Sqrt ($ number)); for ($ i = 2; $ i -le $ sqrt; $ i ++) {...' –

+0

@FrodeF. 고마워, 난 sqrt 코드를 추가했습니다. –

+0

@FrodeF. 그것은 제곱 된 수 (9 등 ..)를 놓치지 않는 한'$ i -lt $ sqrt'이어야합니다. –

관련 문제