经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++如何判断一个数是不是素数
来源:jb51  时间:2022/7/25 19:16:00  对本文有异议

如何判断一个数是不是素数

题目:判断一个数是不是素数,1 < N <= 50000

思路

判断n是否整除(求余是否等于0)大于1而小于sqrt(n)中的任何一个数,如果有则不是素数,否则是素数

实现代码

  1. // 判断一个数是不是素数,1 < N <= 50000
  2. #include <iostream>
  3. #include <cmath>
  4. using namespace std;
  5. // 如果为真,即是素数;否则,不是素数
  6. bool isPrime(int n) {
  7. int i;
  8. for(i = 2; i <= sqrt(n); i++) {
  9. if((n % i) == 0) // 如果能被除了1和它本身的数整除,就不是素数
  10. return false;
  11. }
  12. return true; // 是素数
  13. }
  14. int main(int argc, const char * argv[]) {
  15. int n;
  16. bool isFlag;
  17. while(cin >> n) {
  18. isFlag = isPrime(n); // 调用判断是否是素数的函数
  19. if(isFlag)
  20. cout << n << "是素数" << endl;
  21. else
  22. cout << n << "不是素数" << endl;
  23. }
  24. return 0;
  25. }

快速判断一个数是不是素数(质数)

朴素的方法

判断从2到sqrt(n)是否有数可以与其整除。

下面介绍一个更快的方法

质数有一个分布规律——大于等于5的质数一定和6的倍数相邻。栗子:5和7,11和13。

由此进行剪枝,达到优化的效果。

Code

  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int prime(int num) //判断素数
  5. {
  6. if (num == 1)
  7. return 0;
  8. if (num == 2 || num == 3)
  9. return 1;
  10. if (num % 6 != 1 && num % 6 != 5)
  11. return 0;
  12. int tmp = sqrt(num);
  13. for (int i = 5; i <= tmp; i += 6)
  14. if (num % i == 0 || num % (i + 2) == 0)
  15. return 0;
  16. return 1;
  17. }
  18. int main()
  19. {
  20. int n;
  21. cin >> n;
  22. if (prime(n)) cout << "这个数是素数" << endl;
  23. else cout << "这个数不是素数" << endl;
  24. }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号