用多态计算一百以内的质数
来源:互联网 发布:物业公司软件 编辑:程序博客网 时间:2024/05/28 05:13
用多态计算一百以内的质数
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
- #include <iostream>
- class Sieve
- {
- public:
- virtual int NextNumber () =0;
- };
- class SourceSieve:public Sieve
- {
- public:
- SourceSieve():_i(1){};
- int NextNumber();
- private:
- int _i;
- };
- class Sieve2: public Sieve
- {
- public:
- Sieve2(Sieve &src): _src(src){};
- int NextNumber();
- private:
- Sieve & _src;
- };
- class Sieve3: public Sieve
- {
- public:
- Sieve3(Sieve2 &src): _src(src){};
- int NextNumber();
- private:
- Sieve2 & _src;
- };
- class Sieve5: public Sieve
- {
- public:
- Sieve5(Sieve3 &src): _src(src){};
- int NextNumber();
- private:
- Sieve3 & _src;
- };
- class Sieve7: public Sieve
- {
- public:
- Sieve7(Sieve5 &src): _src(src){};
- int NextNumber();
- private:
- Sieve5 & _src;
- };
- int SourceSieve::NextNumber()
- {
- if (_i>100)
- {
- return -1;
- }
- return _i++;
- }
- int Sieve2::NextNumber()
- {
- int i;
- do
- {
- i = _src.NextNumber();
- } while (i%2==0 && i!=2 && i !=-1);
- return i;
- }
- int Sieve3::NextNumber()
- {
- int i;
- do
- {
- i = _src.NextNumber();
- } while (i%3==0 && i!=3 && i !=-1);
- return i;
- }
- int Sieve5::NextNumber()
- {
- int i;
- do
- {
- i = _src.NextNumber();
- } while (i%5==0 && i!=5 && i !=-1);
- return i;
- }
- int Sieve7::NextNumber()
- {
- int i;
- do
- {
- i = _src.NextNumber();
- } while (i%7==0 && i!=7 && i !=-1);
- return i;
- }
- int main(void)
- {
- SourceSieve src;
- Sieve2 s2(src);
- Sieve3 s3(s2);
- Sieve5 s5(s3);
- Sieve7 s7(s5);
- int i;
- for (;;)
- {
- i=s7.NextNumber();
- if (i==-1)
- {
- break;
- }
- std::cout<< i <<" ";
- }
- return 0;
- }
- 设计思路:
- 利用类的多态性质,对要除法测试的数字进行类似递归的类中传递,有一个除法测试不符合就重新取数(也就是各个类中NextNumber方法使用循环的原因),src为数字源。之所以从7->5->3->2 ->3->5>7这样的递归顺序进行是因为100以内2的倍数的数字比较多,这样可以节省运算。
- 用多态计算一百以内的质数
- 求一百以内的质数
- Python输出一百以内的质数(素数)
- 计算N以内质数的个数
- 计算1到100000以内的质数
- 500以内质数(素数)的计算
- 一百以内的素数
- 简单的计算100000以内的质数(JAVA实现)
- 1000以内的质数
- 求一百以内的素数
- 100以内的质数及100以内质数的和
- 一百万以内的质数表
- 求100以内的质数
- 一千以内的质数表
- 列出100以内的质数
- 10000以内的质数表
- 巧记100以内的质数
- 求100以内的质数
- 机器学习经典算法1--knn
- 文件与注册表的虚拟化技术
- Java反射机制
- CentOS开机自动运行程序的脚本
- JUnit4概述
- 用多态计算一百以内的质数
- erlang初学小练习
- SQL增删改查,循环,触发器,存储过程,以及sql语法
- ruby+watir
- Sumdiv(poj1845)(数学)
- 基于用户管理的同机数据库克隆
- EFM32G(Cortex-M3 内核)NVIC 向量表偏移配置
- eclipse 新建 struts项目
- <meta http-equiv="X-UA-Compatible"content="IE=9; IE=8; IE=7; IE=EDGE">