当前位置:   article > 正文

C语言 素数筛_请问有多少组整数对 l, r 满足:   1. l 和 r 都介于 0 (含)到 100 (含)之间

请问有多少组整数对 l, r 满足:   1. l 和 r 都介于 0 (含)到 100 (含)之间;

素数

描述

素数(质数):除了1和它本身之外不能被其他数整除的数。

合数:除了1和它本身之外能被其他数整除的数。

1既不是素数也不是合数。

给你一个区间 l r,请你输出 l r 中所有的素数

输入

输入两个数l和r

1 ≤ l < r ≤ 1000000

输出

输出l r之间的所有素数

简单的循环加判断方法;

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int l,r;
  5. scanf("%d %d",&l,&r);
  6. int k=1;
  7. for(int i=l;i<=r;i++){
  8. for(int j=2;j<i;j++){
  9. if(i%j==0){
  10. k=0;
  11. break;
  12. }
  13. }
  14. if(k==1){
  15. printf("%d ",i);
  16. }else{
  17. k=1;
  18. }
  19. }
  20. return 0;
  21. }

但是容易运行超时,这里我们为了减少循环,节省时间,可以在循环上面看。

我们知道,素数除了2以外都是奇数,所以我们可以先把偶数去掉,只循环奇数来判断素数

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int l,r;
  5. scanf("%d %d",&l,&r);
  6. int ret = 1;
  7. int i;
  8. for(int x=l;x<=r;x++){
  9. if(x==1||(x%2==0&&x!=2))
  10. ret = 0;
  11. for(i=3;i<x;i+=2){
  12. if(x%i==0){
  13. ret = 0;
  14. break;
  15. }
  16. }
  17. if(ret == 1){
  18. printf("%d ",x);
  19. } else{
  20. ret = 1;
  21. }
  22. }
  23. return 0;
  24. }

还有我们可以认为,因为去除了偶数,根据数学知识可以想到,判断循环条件只要满足i<√x即可。因此做点小小的改动:

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5. int l,r;
  6. scanf("%d %d",&l,&r);
  7. int ret = 1;
  8. int i;
  9. for(int x=l;x<=r;x++){
  10. if(x==1||(x%2==0&&x!=2))
  11. ret = 0;
  12. for(i=3;i<=sqrt(x);i+=2){
  13. if(x%i==0){
  14. ret = 0;
  15. break;
  16. }
  17. }
  18. if(ret == 1){
  19. printf("%d ",x);
  20. } else{
  21. ret = 1;
  22. }
  23. }
  24. return 0;
  25. }

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

闽ICP备14008679号