当前位置:   article > 正文

用函数实现判断素数(以及改进思路)_函数训练之素数判断(预处理篇)

函数训练之素数判断(预处理篇)

素数

在写判断素数这段代码之前,我们首先要了解一个概念什么是素数

素数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。(规定1既不是质数也不是合数)。


方法一:

通过概念,我们可以得到一些思路:

1.如果输入数字等于1或者小于1,不是素数

2.如果输入数字可以被2到它本身减1整除,不是素数。

代码:

  1. int IsPrime(int n){
  2. if (n == 1 || n <1){ //输入数字<1或者=1,不是素数
  3. return 0;
  4. }
  5. for (int i = 2; i < n; i++){
  6. if (n%i == 0){ //输入数字可以被2到它本身减1整除,不是素数
  7. return 0;
  8. }
  9. }
  10. return 1; //输入数字是素数
  11. }

下面我们在主函数中调用IsPrime函数,输出100-200之间的素数。

代码:

  1. #include <stdio.h>
  2. int IsPrime(int n){
  3. if (n == 1 || n <1){ //输入数字<1或者=1,不是素数
  4. return 0;
  5. }
  6. for (int i = 2; i < n; i++){
  7. if (n%i == 0){//输入数字可以被2到它本身整除,不是素数
  8. return 0;
  9. }
  10. }
  11. return 1;//输入数字是素数
  12. }
  13. int main()
  14. {
  15. int num = 0;
  16. for (num = 100; num <= 200; num++){
  17. if (IsPrime(num) == 1){
  18. printf("%d ", num);
  19. }
  20. }
  21. system("pause");
  22. return 0;
  23. }

结果:


方法二(改进):

判断方法还可以简化。n不必被 2~n-1之间的每一个整数去除,只需被 2 ~ √n之间的每一个整数去除就可以了。如果 n不能被 2 ~ √n间任一整数整除,n必定是素数。

原因:因为如果 n 能被 2 ~ n-1 之间任一整数整除,其二个因子必定有一个小于或等于√n ,另一个大于或等于 √n。

代码:

  1. #include <stdio.h>
  2. #include<math.h>
  3. #include<stdlib.h>
  4. int IsPrime(int n){
  5. if (n == 1 || n <1){
  6. return 0;
  7. }
  8. for (int i = 2; i < sqrt(n*1.0); i++){
  9. if (n%i == 0){
  10. return 0;
  11. }
  12. }
  13. return 1;
  14. }
  15. int main()
  16. {
  17. int num = 0;
  18. for (num = 100; num <= 200; num++){
  19. if (IsPrime(num) == 1){
  20. printf("%d ", num);
  21. }
  22. }
  23. system("pause");
  24. return 0;
  25. }

结果:


注意:

如果代码中输入的是sqrt(n)运行后可能会出现如下问题:

因为在C++中sqrt有三种类型,参数分别为long double,float,double。n定义的参数类型是int型,而sqrt()中应该试用double型或者float型,编译器不知道我们要使用哪一个sqrt类型。因此,我们要将sqrt(n)修改为sqrt(n*1.0)

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/75185?site
推荐阅读
相关标签
  

闽ICP备14008679号