程式的素數C語言糾正錯誤,C語言一到一百找到素數哪裡出錯

發布 科技 2024-06-20
13個回答
  1. 匿名使用者2024-01-29

    #include

    #include

    #define max 100

    int main()

    int z,c=0,i,j,k,n,a[max];

    int flag;新增了判斷標誌。

    scanf("%d",&n);

    if(2<=n) 質數 2 首先被取出,因為它是唯一的偶數。

    a[c++]=2;

    for(i=3;i<=n;i+=2) 來確定每個奇數是否是素數,因為偶數肯定不是素數。

    flag=1;在判斷每個數字之前,將標誌設定為 1for(j=3; j 這裡實際上可以更快,但需要引入。

    z=i%j;

    if(z==0)

    flag=0;如果可整除,flag=0 表示它不是素數。

    break;

    if(flag) 如果 flag=1 不變,則表示沒有可整除的數字,i 是奇數。

    a[c++]=i;

    for(i=0;iprintf("%d ",a[i]);

    printf("%d",c);

    system("pause");

    return 0;

  2. 匿名使用者2024-01-28

    切換到 A-1 絕對是可能的,但不需要那麼多週期。

    為什麼選擇A2? 假設乙個數不是素數,那麼 1 (a-1) 乘以等於 a 之間一定有兩個數,這兩個數有什麼特點?

    兩者都等於 2

    任何乙個都等於 2 且小於 2

    要麼它們都小於 2

    這些點不難得到,對於數字 4,它的平方的一半等於自身,所有大於 4 的數字的平方的一半都大於自身,所以如果乙個數 a 不是素數,那麼在 1 a 2 的中間一定有乙個可以整除的數字, 如果在 1 a 2 的中間沒有可以整除的數字,那麼這個數字 a 一定是素數。

    對於你說的 1 a-1 之間的,對於素數,迴圈數是相同的,而對於非素數,a-1 浪費了許多不必要的迴圈。

  3. 匿名使用者2024-01-27

    在鍵盤上輸入 n 以確定 n 是否為素數。

    #include

    main()

    if(i==n)

    printf("您輸入的 %d 是質數! ",n);

    elseprintf("您輸入的 %d 不是質數! ",n);}

  4. 匿名使用者2024-01-26

    使用 2 代替 a-1 是為了提高程式效率,只要 2 和 2 之間沒有可整除性,剩下的一半就不可整除。

  5. 匿名使用者2024-01-25

    事實上,i<=sqrt(a) 就足夠了,這是判斷素數最經濟的計算方法。 A 2 其次,A-1 是最貴的。

  6. 匿名使用者2024-01-24

    因為後半部分不需要判斷,所以可以根據前半部分來判斷數字。 它更簡潔,還可以開啟根數。

  7. 匿名使用者2024-01-23

    使用該函式確定它是否是。

    使用陣列來儲存找到的素數。

    如果你搜尋它,有很多例程。

    作為參考,略有變化。

    就是這樣。

  8. 匿名使用者2024-01-22

    我不知道,太亂了,我看不懂你的邏輯。 j = 2, j = 3 沒問題; j = 4 似乎在 while 迴圈中,加上判斷,當 j 是偶數時,它跳出 while 迴圈,即在 if(j % n != 0) 在底部新增相應的 else break;

  9. 匿名使用者2024-01-21

    因為在for語句中,一旦有某個數字是這個數字的因數,那麼break語句就被執行了,跳出了for迴圈,這個時候,我肯定會<=k,也就是說,這個時候i=k+1,那麼就證明for語句的所有迴圈都執行完了, 也就是說if語句中的語句還沒有執行,也就是說,這個數在2k之間沒有因數,那麼,這個數字也是乙個質數。

  10. 匿名使用者2024-01-20

    例如,判別素數的方法:

    例如,這個數字 m=127,當我們判斷它是否為素數時,我們需要使用從 i 開始的 2 到 126 的整數作為除數來計算 m i 是否可整除,如果是可整除的,則電流 i 是 m 的因數,m 不是素數,程式中的 m%i==0 就是這個判斷, 但判斷是除法的餘數是否為 0。

    從數學上講,我們發現沒有必要計算 2 到 126 作為除數,而只需要計算 2 到根 m(對於 m=127,11 即可得到判斷),因此您將看到迴圈條件的結束變成了根 m。 就好像你已經判斷出m除以4是取之不盡用之不竭的,你不能數m除以4的平方16,你肯定不會被除。 有關詳細資訊,請參閱數學中對此的解釋。

    此外,在程式中,k=sqrt(m); 應該寫成 k=sqrt((double)m);

  11. 匿名使用者2024-01-19

    你確定這個程式是正確的嗎? 斷點的位置,括號,以及它的亂七八糟,如果 k 之前沒有 bradk 跳躍,那麼 k+1 之後就沒有必要測試了,它一定是素數。 所以 i>k+1 if(m%i==0) 只是反覆測試這句話。

    但是你的程式本身應該有問題。 你錯了。 沒有邏輯寫太亂了。

  12. 匿名使用者2024-01-18

    這是真的...... m 除以 2 和根 m 之間的數字,如果乙個數字被除以,它就不是素數。 當 i 自增大於根數 m 並且沒有除法時,則 m 為素數。

  13. 匿名使用者2024-01-17

    第一:我不明白n的用途。

    第二:任何數都可以被 1 整除,所以 y 從 1 開始沒有意義 第三:y 的上限不能小於 x ,如果 y 等於 x,那麼 x 必須能被 y 整除

    第四:如果 x 能被 y 整除,那麼打破並讓 y 自我增加是沒有意義的。

相關回答
9個回答2024-06-20

#include

定義 n 50 * 可以是任何數字的階乘,當然,計算機可以儲存的下乙個 * >>>More

9個回答2024-06-20

這裡 s 是陣列的名稱 (char s[ ],p 是指標變數。 >>>More

6個回答2024-06-20

審判部門 首先要介紹的當然不是"審判庭"僅此而已。 考慮到有些讀者是菜鳥,請解釋一下。 >>>More

10個回答2024-06-20

這句話的意思是,從2到k+1之間沒有能被n整除的數字,所以輸出是素數,當然不能被else代替,否則一些非素數的數字也會作為素數輸出。