1. 程式人生 > >實現素數線性篩

實現素數線性篩

  • 知識準備

    1. for迴圈

      for i in `seq 1 10`;
      do
      	echo ${i}
      done
      #執行結果
      ---------
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      --------
      for ((i = 0; i < 10; i++));
      do
      	echo ${i}
      done
      # 執行結果與上面程式碼相同
      # 雙小括號中可以使用C語言一樣的語法進行數學計算
      # echo 是回顯
      # 美元符號用來取值:取變數值和陣列值(用大括號括把變數或陣列起來)、取命令的值(用小括號或<Tab>鍵上面的``符號括起來,如果用`符號擴起來就不用美元符號取值了)
    2. if分支語句

      num=0
      if [[ ${num} -eq 0 ]];then
      	echo "YES"
      elif [[ ${num} -eq 1 ]];then
      	echo "NO"
      else
      	echo "???"
      fi
      # 執行結果
      # 數值判斷用-eq(==)、-ne(!=)、-gt(>)、-ge(>=)、-lt(<)、-le(<=)
      # 字串判斷用邏輯等和不等(==、!=)
      ---------
      YES
      ---------
      
    3. expr 語句 該語句後面加上數學表示式,可以求數學表示式的值,但是*號前需要加上轉義符號\

  • 程式碼

    #!/bin/bash
    
    if [[ "x${1}" == x ]];then 
        MAX=10
        else
            MAX=${1}
    fi
    
    num=0
    
    for((i = 0; i < ${MAX}; i++));
    do
    
        prime[${i}]=0
    
    done
    
    for((i = 2; i < ${MAX}; i++));
    do
        
        if [[ ${prime[$i]} -eq 0 ]];then
            prime[$num]=$i
            ((num++))
        fi
        for((j = 0; j < ${num};
    j++))
    ; do pj=${prime[$j]} if [[ `expr ${i}\*$pj` -gt ${MAX} ]];then break; fi prime[`expr ${i}\*${pj}`]=1 if [[ `expr ${i}%${pj}` == 0 ]];then break; fi done done for((i=0;i<$num;i++)); do echo ${prime[$i]} done