zzu數學 實驗五素數問題

2021-07-22 01:27:48 字數 1741 閱讀 5232

素數問題

divprime[n_]:=

block[

},for[k=4,k<=n,k++,

block[,

for[i=1,primeset[[i]]

<=sqrt[k]&&i<=length[primeset],i++,

if[mod[k,primeset[[i]]]==0,flag=false;break]

];primeset

];primeset]]

(*重要說明,while為當型迴圈,執行無窮多次,if為判斷,只執行一次*)

試除法mathematica程式

(*程式設計師最忌諱用迴圈,效率太低了*)

divprime[n_] :=

block[, i, j, flag},

if[n == 1, primeset = {}];

for[i = 3, i <= n, i++, flag = true;

for[j = 1, primeset[[j]] <= sqrt[i] && j <= length[primeset], j++,

if[mod[i, primeset[[j]]] == 0, flag = false; break]];

primeset]

(*第一次改進*)

divprime1[n_] := block[, i}, for[i = 4, i <= n, i++,

primeset]

(*第二次改進,改進後速度大大提高,n取100000沒幾秒就出來了*)

divprime2[n_] :=

range[4, n]]

(*總結:能不用迴圈盡量不用迴圈,盡可能使用內建函式,多次用到的量要先存起來*)

對比:matlab中primeornot程式

function

isp = primeornot

(x)isp = false(size(x));

if ~isempty(x)

x = x(:);

if ~isreal(x) || any(x < 0) || any(floor(x) ~= x) || ...

any(isinf(x))

error(message('matlab:isprime:inputnotposint'));

endn = max(x);

if isinteger(x) || n <= flintmax(class(x))

if (isa(x,'uint64') || isa(x,'int64')) && n > flintmax

p = primes(2.^(nextpow2(n)/2));

else

p = primes(cast(sqrt(double(n)),class(x)));

endfor k = 1:numel(isp)

xk = x(k);

isp(k) = (xk>1) && all(rem(xk, p(pend

else

fm = flintmax(class(x));

p = primes(sqrt(fm));

for k = 1:numel(isp)

xk = x(k);

isp(k) = (xk1) && all(rem(xk, p(pend

endend

zzu數學 實驗一泰勒級數

泰勒逼近 任意函式的泰勒逼近 n 10 定義逼近程度 f tan x 任給乙個函式 taylor f x0 n sum d f,d f,x x0 k x x0 k,定義泰勒展開函式 figures table taylor f,0,k plot 繪圖 animate f sin x 任給乙個函式 t...

zzu數學 實驗零入門測試

入門練習 版本一 animate clear d,a,t 清除變數 a graphics line 繪製兩根初始線段 l n r n 將兩線段n等分 t table 生成n個點對用於畫n條線段 d array f,n 定義陣列存放圖形 for i 1,i n i d i graphics line ...

數學 反素數問題

1060 最複雜的數 把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。輸入第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t 100 第2 t...