1. 程式人生 > >C語言求素數的兩種方法

C語言求素數的兩種方法

1,判斷n是否能被1~n-1整

#include<stdio.h>
int main()
{
    int i, n;
    scanf("%d", &n);
    for (i = 2; i < n ; i++)
    {
        if (n%i == 0)
            break;
    }
        if (i < n) printf("This is not a prime.");
        else printf("This is a prime.");
        return 0;
}


2,判斷n是否能被2~√n間的整數整除

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i;
	double k;
    scanf("%d", &n);
    k = sqrt(n);
    for (i = 2; i <= k;i++)
	{
        if (n%i == 0) break;
	}

    if (i <=k) printf("This is not a prime.");
    else printf("This is a prime");
    return 0;

}
 素數的定義是隻能被1和他本身整除,1不是素數.因此要判斷一個數是否為素數.就要判斷它能不能被比他小的所有素數整除,這是一個演算法.(寫到演算法時,我只能寫出用它除以比他小的所有數,造成運算速度低下)
這裡給出的是一個更快速的方法.要判斷一個數是否為素數,只要判斷比它開根號後的數小的數,能否把它整除.
為什麼可以這樣做呢.從百度得到的答案如下:
如果一個質數大於根號n,而n可以除盡它,那麼n必然也可以除盡一個更小的質數。
例如21,它可以除盡7,而它同樣可以除盡3。所以判斷21是否質數,只需要判斷21是否可以除盡2和3就可以了。5和7和11就不需要判斷了。
想來就是這樣,例如21.根號21乘根號21等於21.則當一個比根號21的數大的數乘另一個數得到21.另一個數必然小於根號21.
由此可以得到一個法2較快的素數判斷演算法