ふつうに再帰が使えます。
function last_prime($n, $p0 = 2) { for([long]$p = $p0; $p * $p -le $n; ++$p) { if($n % $p -eq 0) { return last_prime ($n / $p) $p } } $n } $n = 600851475143 last_prime $n
どれくらいの深さまでOKなのでしょうか。
function last_prime($n, $p0 = 2) { for([long]$p = $p0; $p * $p -le $n; ++$p) { if($n % $p -eq 0) { return last_prime ($n / $p) $p } } $n } $n = 600851475143 last_prime $n
呼び出しの深さのオーバーフローのため、スクリプトが失敗しました。呼び出しの深さ が 1001 に達しましたが、最大値は 1000 です。 + CategoryInfo : InvalidOperation: (1001:Int32) []、ParentContains ErrorRecordException + FullyQualifiedErrorId : CallDepthOverflow
1000回だそうです。