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较快的素数判断算法
这里给出的是一个更快速的方法.要判断一个数是否为素数,只要判断比它开根号后的数小的数,能否把它整除.
为什么可以这样做呢.从百度得到的答案如下:
如果一个质数大于根号n,而n可以除尽它,那么n必然也可以除尽一个更小的质数。
例如21,它可以除尽7,而它同样可以除尽3。所以判断21是否质数,只需要判断21是否可以除尽2和3就可以了。5和7和11就不需要判断了。
想来就是这样,例如21.根号21乘根号21等于21.则当一个比根号21的数大的数乘另一个数得到21.另一个数必然小于根号21.
由此可以得到一个法2较快的素数判断算法