寻找素数-“;“因素”;在MacOS上找不到命令

寻找素数-“;“因素”;在MacOS上找不到命令,macos,bash,scripting,Macos,Bash,Scripting,我正在编写一个bash脚本来查找所有小于给定整数的素数 代码如下: #!/bin/bash BADARGS=65 if [ -z $1 ] then echo "Usage:`basename $0` cannot have a null parameter." exit $BADARGS elif [ $1 -lt 2 ] then echo "Usage:`basename $0` should have the value 2 or more as the parame

我正在编写一个bash脚本来查找所有小于给定整数的素数

代码如下:

#!/bin/bash

BADARGS=65
if [ -z $1 ]
then
   echo "Usage:`basename $0` cannot have a null parameter."
   exit $BADARGS
elif [ $1 -lt 2 ]
then
   echo "Usage:`basename $0` should have the value 2 or more as the parameter."
   exit $BADARGS
fi
TRUE=0
FALSE=
Primes(){
checkPrime=( $(factor $1) ) # this puts factors into array

if [ -z "${checkPrime[2]}" ] # third element is null
then
   return $TRUE
else
   return $FALSE
fi
}
printf "2 "
let "n = 3"
while [ $n -le $1 ]
do
   if Primes $n
   then
       printf "$n "
   fi
       let "n += 2"   
done
printf "\n"

# END
我正在使用MacOS,执行脚本时收到以下错误消息:

Jessicas-MacBook-Pro:Documents jessicalott$ ./primes.sh 10
2 ./primes.sh: line 16: factor: command not found
3 ./primes.sh: line 16: factor: command not found
5 ./primes.sh: line 16: factor: command not found
7 ./primes.sh: line 16: factor: command not found
9 

我今天早上开始在bash上写文章,所以如果有任何帮助,我将不胜感激。我想这可能与我没有使用Linux有关,但我希望不是这样。

factor
不是标准的Unix命令。Linux有它。OSX没有。

如评论中所述,factor是GNU coreutils的一部分。您可以通过以下方式安装coreutils:


之后,脚本中的
factor
可以替换为
/usr/local/bin/gfactor

我在使用较短的自制安装时出错,但这对我有效:

brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt

保存此
Makefile
并运行
make
。它从NetBSD CVS存储库下载
因子
素数
的源代码并构建它们。如果没有
curl
,请尝试
make G=wget

W= http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/games
G= curl -L -R -O
CFLAGS= -Wall -Wextra -O2 -Dlint -D__dead= -DHAVE_OPENSSL

all:    get bin

bin:    factor primes

factor: factor.o pr_tbl.o
    $(CC) -o $@ factor.o pr_tbl.o -lcrypto

primes: primes.o pr_tbl.o pattern.o spsp.o
    $(CC) -o $@ primes.o pr_tbl.o pattern.o spsp.o -lm

clean:
    -rm -f factor primes factor.o pattern.o pr_tbl.o primes.o spsp.o

get:
    $G $W/factor/factor.6
    $G $W/factor/factor.c
    $G $W/primes/pattern.c
    $G $W/primes/primes.6
    $G $W/primes/primes.c
    $G $W/primes/primes.h
    $G $W/primes/pr_tbl.c
    $G $W/primes/spsp.c
(Makefile更新为包含
spsp.c


也可以在

上找到,具体来说,它是GNU
coreutils
软件包的一部分,您可以使用
brew
端口
fink
,或者从源代码处安装它。@chepner:如果您输入这个作为答案,我将投票支持您的答案并删除我的答案。这不是一个好答案。要指出明显的问题,
brew搜索因子
brew cask安装因子
将找到。搜索苹果商店也是如此。您需要的是
brew安装coreutils
@smci:
brew
也不是macOS的一部分,因此
brew安装coreutils
在没有事先安装的情况下无法工作。@DMac:
gfactor
不是标准macOS(以前的OS X)安装的一部分。这似乎不如使用brew这样的软件包管理器安装。代码不知道它来自何处,因此永远无法更新自身。@smci,当然可以,但我的解决方案没有依赖项。True。NetBSD的
primes
是否在brew、MacOS、Gnu等的任何软件包中提供?我搜索了一下,但没找到。我问了一下
W= http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/games
G= curl -L -R -O
CFLAGS= -Wall -Wextra -O2 -Dlint -D__dead= -DHAVE_OPENSSL

all:    get bin

bin:    factor primes

factor: factor.o pr_tbl.o
    $(CC) -o $@ factor.o pr_tbl.o -lcrypto

primes: primes.o pr_tbl.o pattern.o spsp.o
    $(CC) -o $@ primes.o pr_tbl.o pattern.o spsp.o -lm

clean:
    -rm -f factor primes factor.o pattern.o pr_tbl.o primes.o spsp.o

get:
    $G $W/factor/factor.6
    $G $W/factor/factor.c
    $G $W/primes/pattern.c
    $G $W/primes/primes.6
    $G $W/primes/primes.c
    $G $W/primes/primes.h
    $G $W/primes/pr_tbl.c
    $G $W/primes/spsp.c