计算1000以内的总质数个数

#include <stdio.h>

int main() {

  int micro[500];       // 质数保存素组
  int number = 0;       // 质数个数
  
  micro[number++] = 2;  // micro[0]=2
  micro[number++] = 3;  // micro[1]=3, number=2

  unsigned long counter = 0;  // 计算处理次数

  int start = 5;    // 质数开始数字
  int end = 1000;   // 指数结束数字

  int inner ;   // 内层循环变量

  for (start=5; start <= end; start+=2) {
    int flag = 0; // 判断是否为不是指数
    
    // test
    //printf("%d\n", start);

    /*  
     *
     * 循环已经保存的指数为判断条件
     * 例如:100以内人数字
     * 20 * 5 = 100
     * 不被5整除的数字,20也不会被整除
     * */
    for(inner=1; counter++, micro[inner] * micro[inner] <= start; inner++) {
      counter++;

      // printf("%d\n", start);
      // return 0;
if (start % micro[inner] == 0) {
        flag = 1;
        break;
      }   
    }

    if (!flag)
      micro[number++] = start;
  }

  int j = 0;
  for(inner=0; inner < number; inner++) {
    j++;
    printf("%3d\t", micro[inner]);
    if (j % 7 == 0) {
      puts("");
      j = 0;
    }
  }

  printf("处理运算的次数:%lu\n", counter);
  printf("0~%d之间的共个数为:%d\n", end, number);

  return 0;
}
 2      3   5   7  11  13  17 
 19  23  29  31  37  41  43 
 47  53  59  61  67  71  73 
 79  83  89  97 101 103 107 
109 113 127 131 137 139 149 
151 157 163 167 173 179 181 
191 193 197 199 211 223 227 
229 233 239 241 251 257 263 
269 271 277 281 283 293 307 
311 313 317 331 337 347 349 
353 359 367 373 379 383 389 
397 401 409 419 421 431 433 
439 443 449 457 461 463 467 
479 487 491 499 503 509 521 
523 541 547 557 563 569 571 
577 587 593 599 601 607 613 
617 619 631 641 643 647 653 
659 661 673 677 683 691 701 
709 719 727 733 739 743 751 
757 761 769 773 787 797 809 
811 821 823 827 829 839 853 
857 859 863 877 881 883 887 
907 911 919 929 937 941 947 
953 967 971 977 983 991 997 
处理运算的次数:3774
0~1000之间的共个数为:168

原创文章,作者:rainbow,如若转载,请注明出处:http://www.178linux.com/71567

(0)
rainbowrainbow
上一篇 2017-03-22 11:54
下一篇 2017-03-22 22:59

相关推荐

  • 什么是文件系统

    文件系统:层级结构;有索引; /: 原初起点; 倒置树状结构; /dev/pts/2: 最左侧/: 表示根目录 其它的/: 表示路径分隔符 Linux的路径分隔符是/ Windows的是\ 文件的路径表示: 绝对路径:从根开始表示出的路径  相对路径:从当前位置开始表示出的路径 文件名使用法则: 严格区分字符大小写:file1, File1, FI…

    Linux干货 2016-10-29
  • 磁盘及文件系统管理—第二篇

    挂载配置文件 每行定义一个要挂载的文件系统及相关属性     使用mount -a挂载/etc/fstab文件中所定义的文件系统     配置文件格式:         一共分为6个字段: &nbsp…

    Linux干货 2016-08-30
  • 人志建,则无敌—vim练习题

    马哥网络班21期-第六周博客 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@caicai ~]# cp -a /etc/rc.d/rc.sysinit /tmp [root@caicai&nbsp…

    Linux干货 2016-08-15
  • 端口转发实例

    什么是端口转发?      端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法。端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为,其使一个外部用户从外部经过一个被激活的NAT路由器到达一个在私有内部IP地址(局域网内部)上的一个端口。 为什么需要端口转发? …

    2017-04-13
  • 简述硬盘参数和ext2文件系统

    硬盘类型: HDD机械硬盘和SSD固态硬盘: HDD是现在最普通的硬盘,容量大,稳定,是存储数据的首选。SSD是现在新兴的硬盘,相比HDD,它的并发i/o高,传输速度可达HDD的几倍以上,无噪音低功耗,而且轻便防震,随着各大厂商发力,性价比也越来越高,要求性能高或者数据轻度使用者可以优先考虑SSD。   容量:存储数据的空间大小,一般来说HDD每G…

    Linux干货 2016-04-19
  • LAMP基于rsyslog+loganalyzer实现日志集中管理及分析

    前言 作为一名运维工程师,查看分析系统日志是每天必做的功课,但每次查看日志都得一台服务器一台服务器的看,几台服务器还可以这么对付,但如果管理成百上千台线上服务器,这种方法就捉襟见肘了。于是我们就需要用到日志服务器了,但是如何能让它更直观的显示呢?loganalyzer是一个不错的选择,本文将讲解如何使用rsyslog+loganalyze实现日志统一管理及分…

    Linux干货 2015-04-27

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-29 17:18

    不错哦,C也用的这么溜了。