首頁>Club>
9
回覆列表
  • 1 # 使用者1465424935672

    改完的如下:

    clear all

    disp("10000以內全體素數:")

    count=0;

    for i=2:10000

    j=2; % 每次外迴圈,j都要從頭再來,所以要拿到外迴圈裡。

    k=sqrt(i);

    while j

    if rem(i,j)==0

    break

    else

    j=j+1;

    end

    if j>k

    fprintf("%5d",i) % 給你改成%5d了,要不都挨一塊分不出個兒來了。

    count=count+1;

    if rem(count,13)==0 % 這個if塊,要放到判斷j>k裡,要不會多出好多空行

    fprintf("\n")

    end

    break % 這個最重要,j>k時一定要退出內迴圈,要不然j會繼續執行到等於i才會退出的

    end

    end

    end

    不過話說回來,matlab本身就帶求n以內素數的函式啊,用primes

    比如

    >> primes(100)

    ans =

    Columns 1 through 17

    2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59

    Columns 18 through 25

    61 67 71 73 79 83 89 97

    如果不可以用primes的話,自己編也不用那麼複雜啊

    給你重新編了個簡單的,不太好理解,不過程式簡單。

    n=10000;

    p = 1:2:n; % 找出奇數,因為除了2的所有素數都是奇數

    q = length(p);

    p(1) = 2; % 第一個素數為2

    for k=3:2:sqrt(n)

    if p((k+1)/2) % 如果p((k+1)/2)也就是p中原本應該等於k的那個數不為0的話

    p((k+1)/2+k:k:q)=0;

    % 這句的作用就是把p中所有能被k整除的數設為0,但不包括k本身。

    % (k+1)/2是奇數k在p中的位置,(k+1)/2+k代表p中除了k本身之外的第二個能被k整除的數的位置,依此類推

    end

    end

    p=p(p>0); % 把等於0的,也就是原來位置上的數是合數的去掉

    fprintf("%d以內的素數有:\n",n);

    q=length(p);

    for k=1:13:q

    fprintf("%5d",p(k:min(q,k+12))); % 每行輸出13個數

    fprintf("\n");

    end

  • 中秋節和大豐收的關聯?
  • 汽車打不起火怎麼辦?當車停久了。車內放著音樂。電放完了。打不起火。該怎麼辦? 一個人的時候怎麼解決?