[英]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.