簡體   English   中英

解釋這個素數程序[C]

[英]explain this prime number program [C]

#include<stdio.h>

main()
{
    int n;

    int a,b,flag=1;
    scanf("%d",&n);

    for(a=2; a<=n; a++)
    {
        if(n % a == 0)
        {
            printf("not prime");
            flag = 0;
            break;
        }
    }

    if(flag == 1)
    {
        printf("is prime");
    }

    getch();
}

當你使用它for循環

for(a=2; a<=n; a++)

當用戶輸入2時,它將打印“not prime:

如果你把if(flag == 1)語句放在for循環中,當用戶輸入時它不會打印任何東西2.為什么if(flag == 1)在for循環之外

#include<stdio.h>
main()
{
    int i, num, flag = 1;
    scanf("%d",&num);
    for(i=2; i<=sqrt(num); i++)
    {
        if(num%i==0)
        {
            printf("not prime");
            flag=0;
            break;
        }
    }

    if(flag==1)
    {
        printf("is prime");
    }

    getch();
}

當你在for循環中使用平方根時

for(i=2; i<=sqrt(num); i++)

如果你輸入2那么它給出正確的結果那么它打印2是素數為什么?

什么是標志變量它是如何工作的?

問題是這條線錯了:

for(a=2; a<=n; a++)

它應該是這樣的:

for(a=2; a<n; a++)

因為n總是可以被自身整除,所以當a是n時n % a == 0意味着n % a == 0 並不意味着數量不是素數。 素數可以被1和它本身整除,但沒有其他整數。

當您將測試更改a <= sqrt(num)您也碰巧修復了此錯誤。

for(a=2; a <= n; a++)

應該

for(a=2; a < n; a++)
         //^ difference

此外,當您使用sqrt(n) ,最好在循環外寫入此內容以提高性能:

int m = sqrt(n); //store the result in int type
for(a=2; a <= m ; a++)

通過這種方式,您只計算sqrt(n)而不是每次迭代sqrt(n) ,而不是依靠編譯器來優化此步驟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM