-
#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;
-
切換到 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 浪費了許多不必要的迴圈。
-
在鍵盤上輸入 n 以確定 n 是否為素數。
#include
main()
if(i==n)
printf("您輸入的 %d 是質數! ",n);
elseprintf("您輸入的 %d 不是質數! ",n);}
-
使用 2 代替 a-1 是為了提高程式效率,只要 2 和 2 之間沒有可整除性,剩下的一半就不可整除。
-
事實上,i<=sqrt(a) 就足夠了,這是判斷素數最經濟的計算方法。 A 2 其次,A-1 是最貴的。
-
因為後半部分不需要判斷,所以可以根據前半部分來判斷數字。 它更簡潔,還可以開啟根數。
-
使用該函式確定它是否是。
使用陣列來儲存找到的素數。
如果你搜尋它,有很多例程。
作為參考,略有變化。
就是這樣。
-
我不知道,太亂了,我看不懂你的邏輯。 j = 2, j = 3 沒問題; j = 4 似乎在 while 迴圈中,加上判斷,當 j 是偶數時,它跳出 while 迴圈,即在 if(j % n != 0) 在底部新增相應的 else break;
-
因為在for語句中,一旦有某個數字是這個數字的因數,那麼break語句就被執行了,跳出了for迴圈,這個時候,我肯定會<=k,也就是說,這個時候i=k+1,那麼就證明for語句的所有迴圈都執行完了, 也就是說if語句中的語句還沒有執行,也就是說,這個數在2k之間沒有因數,那麼,這個數字也是乙個質數。
-
例如,判別素數的方法:
例如,這個數字 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);
-
你確定這個程式是正確的嗎? 斷點的位置,括號,以及它的亂七八糟,如果 k 之前沒有 bradk 跳躍,那麼 k+1 之後就沒有必要測試了,它一定是素數。 所以 i>k+1 if(m%i==0) 只是反覆測試這句話。
但是你的程式本身應該有問題。 你錯了。 沒有邏輯寫太亂了。
-
這是真的...... m 除以 2 和根 m 之間的數字,如果乙個數字被除以,它就不是素數。 當 i 自增大於根數 m 並且沒有除法時,則 m 為素數。
-
第一:我不明白n的用途。
第二:任何數都可以被 1 整除,所以 y 從 1 開始沒有意義 第三:y 的上限不能小於 x ,如果 y 等於 x,那麼 x 必須能被 y 整除
第四:如果 x 能被 y 整除,那麼打破並讓 y 自我增加是沒有意義的。
#include
定義 n 50 * 可以是任何數字的階乘,當然,計算機可以儲存的下乙個 * >>>More
這句話的意思是,從2到k+1之間沒有能被n整除的數字,所以輸出是素數,當然不能被else代替,否則一些非素數的數字也會作為素數輸出。