在c語言程式設計中「求100 200間的全部的素數」為什麼會用到

2021-12-22 19:50:47 字數 2809 閱讀 6473

1樓:風若遠去何人留

這是乙個數學問題。

質數的定義為,除了1和本身,沒有其它因子,即沒有其它數可以被其整除。

對於任意的數n,因子肯定是比n小的數,所以如果m>n,那麼m不可能是n的因子。

於是最直觀的判斷方法就是,從1一直到n計算模除,獲取到因子總數,如果總數為2,那麼就是質數。

這樣對於任意的n,判斷質數就需要做n次模除。為了使程式優化,可以修改為,對2到n-1做模除,只要有乙個可以整除,那麼就不是整數。

對於這樣的演算法,可以再次優化。

如果n有乙個引子m, 那麼可以寫作n = m*k的形式,那麼m和k不可能同時大於n的平方根s。

這一點可以用反證法來證明。

如果m>s 且k>s

那麼m*k > s*s

於是得到n>n的結論。明顯是錯誤的。

於是m和k至少有乙個是小於等於s的。

這樣在判斷質數時,只需要從2一直到s做模除,就可以準確的判斷是否有其它因子,從而得到是否為質數的結論。

這就是為什麼在判斷質數中的程式中會用到求平方根的原因。其本質原因是為了減少模除次數,提高效率。

2樓:淦海瑤

不用也可以, k=sqrt(m); for(i=2;i<=k;i++) 這個可以換成

for(i=2;i*i<=m;i++)

為什麼需要這個sqrt(m),其實是為了減少迴圈次數而已

有三個迴圈次數,乙個是m-1,乙個是m/2(m的一半),最後乙個是sqrt(m),這三個數,都可以,但是sqrt(m)最小

m-1不用說,肯定是可以的,素數的定義就是這樣

m/2這個也是可以的,m/2~m之間肯定不會有他的因子,因為這個區間的數值乘以最小的係數2都比m大

sqrt(m)這個難理解一點。因為某個數的因子肯定是圍繞sqrt(m)這個數值的在兩邊排列的

也就是說,在1~sqrt(m)之間有個因子,那麼m除以這個因子得到的數值肯定在sqrt(m)~m之間,所以計算一次就夠了

而且sqrt(m)這個數值比m/2要小,所以為了減少計算次數,用這個是最好的

100肯定不是素數,這是定下的,呵呵

c語言程式設計:找出100~200之間的所有素數,

3樓:紅山人

#include

main()

printf("n=%d",n);/*列印素數個數*/}

4樓:匿名使用者

#include

#include

int prime(int n)/*判斷是否為素數函式,是返回1,不是返回0 */

return 1;/*如果是素數,返回1*/} main(void)

getch();}

5樓:余帆

101,103,109,111,113......

6樓:

#include

#include

int main()

}if(flag)

}return 0;}

7樓:

#include

bool issushu(int n)

void main()

i+=2; } }

編寫c語言程式,求100~200之間所有素數。

8樓:匿名使用者

素數就是只能被1和本身整除的數,先定義乙個函式用於判斷乙個數是否是素數,在從100到200依次迴圈判斷,如果是素數則輸出。

#include

int fun(int n){//判斷n是否是素數int i;

for(i=2;i

9樓:彌鷗逮成蔭

#include

void

main()

void

outputsushu(int

k)if(w==0)

printf("%d\t是素數\n",k);

else

printf("%d\t不是素數\n",k);}

10樓:王澤無敵真的

# include

# include

int main()

if(k>sqrt(i*1.0))

if(n%10==0)

printf("\n");

}return 0;}

11樓:

#include

#include

int isprime(int n)

void main()

printf("\n");

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

12樓:匿名使用者

#include

#include

#include

int primer_number(int lower, int upper)

if (flag == 0)

count++;

}return count;

}int main(void)

c語言程式設計 求100-200之間的全部素數

13樓:匿名使用者

把else那行去掉

在第二個for後面

if(i == sqrt(n))

printf("%d\n", n);

求c語言程式設計高手幫忙,求C語言程式設計高手幫忙!!!

初看,程式應先宣告乙個包含20個整型數元素的陣列,但從程式目標來看,根本不需要所有的數,而只需找出次大的數而已,所以只要宣告三個整型變數 輸入 input 最大數 max 次大數 sec 即可。而且從記憶體利用率來看,這樣也更節省記憶體空間。以下程式你的所有要求都滿足了,僅供參考 include c...

C語言程式設計題求1,C語言程式設計題求112131415前30項的和。

include int main int argc,char argv sum 1000 n int sum temp n temp 10 if temp 4 n 1 n 10 printf 2f n n 100.0 return 0 可能抄 有點襲冗長,可以修改精煉下 哈,呵呵 include i...

C語言程式設計題,求大神解答呀,c語言程式設計題求大神幫忙!

如果檔案中有其他的字元 只轉小寫字母的話 用下面的 int main fclose fp delete rbuffer 其實這個題目涉及的知識點主要有如下幾點 1.txt檔案的讀寫 2.字串和byte的轉換 3.字母大小寫的判斷 可以通過字母對應的asci碼值的大小範圍來區分 謝謝!c語言程式設計題...