求質數 素數 的方法

2021-10-04 10:23:42 字數 1058 閱讀 7011

質數是數學重要的一環,所謂質數,就是除了1和它本身外不存在任何因子的數。以下整理了一下c語言中質數的求法。

問題:輸入乙個正整數n(n>=2),求不大於n的全部質數

方法一:迴圈法

思路:判斷乙個數n是不是質數,可以用2到√n之間的所有整數去除n,如果都不能整除,那麼n是質數。設計迴圈巢狀時盡量跳過一些不必要的情況。

1."2"為必輸出的質數,可以單獨輸出。這樣迴圈可從3到√n判斷。

2.為什麼只需要判斷到√n的數呢?

因為n=√n*√n,n的因數除了√n,其他都是成對存在的,且必定乙個大於√n乙個小於√n,假設n不是質數,有個因數大於√n(不是n本身),則n必定有乙個與之對應的小於√n的因數。

3.除了2以外,不存在是偶數的質數,所以在設計迴圈時可以設定步數step為2。

**:

1 #include2

intmain()314

if(m*m>i)

15 printf("

%d\n

",i);16}

1718

return0;

19 }

輸入:100

執行結果:

方法二:篩法(空間換時間)

1.設定乙個陣列a,a[i]的值為1表示i為質數,將所有元素初始化為1

2.篩去m的倍數,即把a[2*m]、a[3*m]…置為0

3.輸出a[i]值為1的i。

**:

1 #include2

#define max 100

3ints;4

inta[max];

5void

prime()618

}19intmain()

20

max設定值:100

執行結果:

可以看出,兩種方法都成功得到了結果。

Python求質數 素數

先寫乙個裝飾器d1.py,為了測試執行時間 from functools import wraps import time deff1 func wraps func deff2 begin time.time func end time.time print cost end begin retu...

Java求素數(質數)的幾種方法

比1大的整數中,除了1和它本身以外,不再有別的因數,這種整數叫做質數或素數 要判斷x是否為質數,就從2一直嘗試到x 1的做法效率是最差的!其實只要從2一直嘗試到 x,就可以了。因為因數都是成對出現的。比如,100的因數有 1和100,2和50,4和25,5和20,10和10。看出來沒有?成對的因數,...

求質數 素數 演算法思想

此演算法是網上查詢到的 覺得不錯 所以拿來與大家分享 1 求10000 以內的所有素數。素數是除了 1和它本身之外再不能被其他數整除的自然數。由於找不到乙個通項公式來表示所有的素數,所以對於數學家來說,素數一直是乙個未解之謎。像著名的 哥德 猜想 孿生素數猜想,幾百年來不知吸引了世界上多少優秀的數學...