• 筛选法求素数


    我们都知道求一个数是不是素数的方法是十分简单的,但是当你判断一个数字集合里面都有哪些素数的时候,纯暴力法就会显得效率十分低下,这时候就需要用技巧筛掉明显不是素数的数字,剩下的再采用暴力直接求解,那么那些明显不是素数呢?首先偶数全不是素数,其次一个素数的倍数也不是素数,那么筛掉这两种情况剩余的一定是素数(反证法可证明),程序如下:

     1 int min,max;
     2     int t;
     3     int i,j,k;
     4     int flag[10000] = {0};
     5     int num[10000];
     6     num[2] = 1;
     7     num[1] = 0;
     8     printf("请输入数字的区间范围:");
     9     scanf("%d,%d",&min,&max);
    10     if(min > max)
    11     {
    12         t =min;
    13         min = max;
    14         max = t;
    15     }
    16     //4以后的偶数全不是素数
    17     for(i = 4; i<= max; i+=2)
    18     {
    19         flag[i] = 1;
    20     }
    21     //从3开始计算
    22     for(i = 3 ;i <= max;i++)
    23     {
    24         if(flag[i])
    25         {
    26             num[i] = num[i - 1];
    27             continue;
    28         }
    29         else
    30         {
    31             num[i] = num[i - 1] + 1;
    32             //素数的倍数全不是素数
    33             for(k = i ; k <= max; k+=i)
    34             {
    35                 flag[k] = 1;
    36             }
    37         }
    38     }
    39     printf("在%d到%d之间,一共有%d个素数",min,max,num[max] - num[min]);
    40     system("pause");
    41     return 0;

  • 相关阅读:
    Flume实现写入es
    JMeter创建上传文件脚本
    JQuery的dataTable实现分页
    Dubbo服务发布机制-源码学习
    spring容器启动过程(Spring源码阅读)
    Hadoop学习笔记一(HDFS架构)
    hbase修改表TTL
    hive复制表
    提交docker镜像到远程仓库
    centos7 安装ssh
  • 原文地址:https://www.cnblogs.com/baikequanshu/p/3381609.html
Copyright © 2020-2023  润新知