c語言素數判斷為什麼只迴圈到平方根就行

2021-03-10 14:31:17 字數 1466 閱讀 1232

1樓:霧月の沉默

這兒有你想要的bai回答

因為如果n可以被du一個zhi數整除,那麼其中一個數一定小於等dao於n開方,

內另一個大於等於n的開方,所以容只需要算到這兒,到後面就是多餘的了

2樓:倒黴熊

素數是抄

除1和本身

外,沒有襲其他因子。

假設 這個數baix的 平方根

du為 a。

證明,比a大的比本身zhix小的dao沒有比較的必要。

假設 b >a ,且是x的因子,那麼一定存在一個c使 c*b =x,且 ca,若c>a,則 b*c>x)

那麼判斷到c的時候,就知道x不是素數了,所以沒有必要往下走了。

3樓:

因為一個數的因數都抄

是成對的,比如

12=1 *12

=2*6

=3*4

=4*3

=6*2

=12*1

比如25

25=1*25

=5*5

=25*1

如果到了他的根號,還沒有一個因子出現,那麼後半部分也不會有因子出現了

4樓:匿名使用者

一個數,不可能被比自己一半大的數整除。

簡單來說,4x4=16,16不可能被比8大的數整除。

這是數學規律,可以減少一半的迴圈次數,大大提高程式效率

5樓:匿名使用者

這個迴圈只會在有數可以把n整除的時候break,中止掉。你的判斷是從2開始的這種判斷素數的方法效率太低了點,你去看看一些基礎教c語言的書裡講判斷素數

c語言中,為什麼可以用平方根判斷素數?請說得詳細點。謝謝! 急!!!

6樓:匿名使用者

你理解錯了。

不是用平方根判斷素數,而是最大取到平方根的整數,可以有效減少迴圈的次數。這個屬於程式的優化。

c語言為什麼判斷素數用sqrt ?拜託各位大神

7樓:mio丶

你好,我們假設一個數a; 那麼a=(a^1/2)*(a^1/2); 如果a不是素數; 那麼a有一個版因子b a=b*c; 那麼a的因權

子中(b或c)必定有一個是小於等於a^1/2的; 所以判斷的時候不用判斷到1-a,只需要1-a^1/2; 明白了吧?

8樓:蔣振華悉卿

k=sqrt(n)

for(i=2;i<=k;i++)

中的k有利於減少無用的迴圈次數。

因為根據數學推理可知,判斷一個數是不內是素數不用都除於所容有小於此數的數的。只要除數小於該數的平方根就足以判斷該數是不是素數了。

這也體現c語言的程式簡潔特點。

怎麼用c語言判斷數是不是素數,怎麼用c語言判斷一個數是不是素數

解釋如下 include stdio.h include math.h main include stdio.h include math.h void main 最佳方案是用素數分佈來處理,在處理大素數時尤其合理,用算術基本定理可能太慢了。如果知道素數分佈相關知識,編出來還是很容易的,不然告訴你也...

c語言程式設計 設計函式用於判斷數是否為素數,如果是素數返回1,否則返回

源程式 以及演算法解釋如下 define crt secure no warnings include int func int m 判斷函式int main 程式執行結果如下 擴充套件資料 輸出1 100之間的所有素數程式如下 include int primenumer int x 定義一個函式...

編輯c語言程式判斷數m是否為素數只能被1和

bai du zhi include int isprime long n int main int argc,char const argv int isprime long n dao 執行內 容 int main else return 0 編一程式,判斷自然數n是否為素數 素數是隻能被1和它...