【C++习作】用多态计算一百以内的质数
2012-12-10 21:00
411 查看
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
作者:gnuhpc
出处:http://www.cnblogs.com/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的倍数的数字比较多,这样可以节省运算。
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
相关文章推荐
- 用多态计算一百以内的质数
- C++ 笔试题简单练习----求N 以内质数 和 计算多少对质数等于N
- C++的速度比Java快2.1%:来自计算100万以内质数的实验数据对比
- 求一百以内的质数
- 简单的计算100000以内的质数(JAVA实现)
- C++求N以内所有的质数
- C++实现简易表达式的计算(操作室为10以内)
- C++范例之求100以内质数的三种循环
- 打印100以内的素数(质数)----C++实现、python实现
- c++ python 计算100以内的素数
- 计算N以内质数的个数
- 500以内质数(素数)的计算
- 计算1到100000以内的质数
- C++(MFC)快速计算质数
- SQL计算100以内的质数(可以把100换成任意的整数)
- 计算100以内的质数或合数
- SQL计算100以内的质数(可以把100换成任意的整数)
- Python输出一百以内的质数(素数)
- 一道经典面试题:计算n以内的素数(质数)算法
- 输出100000以内的质数,并计算时间 学习笔记