#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的倍数的数字比较多,这样可以节省运算。
分享到:
相关推荐
求XX以内的全部素数,代码已经过优化,效率高。
c++程序求100以内的质数,很简单的就是要会质数的函数就可以,赚点分数 希望和高手学习
用python求100以内质数
为了更直观地展示100万以内的素数表,以下是一部分素数的示例: - 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 - …… 通过以上...
求100 以内的素数。要求:1)以十进制输出这些素数,每行10 个,每输出一个素数都要有数秒的停顿;2)统计这些素数的个数,以十进制形式输出;3)计算这些素数之和,以十进制形式输出;4)数据的输入和结果的输出都要有必要的...
在一百以内且大于7的数字中,用两个素数表示一个偶数的java源代码。
1000以内的质数:"+str ; }">public class Test public static void main String [] args { String str ""; for int i 1; i < 1000; i++ { for a 2; a < int i 2; a++ { if i % a 0 { ...
#### 二、1亿以内质数的数量 根据题目给出的信息,1亿以内的质数共有5,761,455个。这一数字不仅展示了质数分布的密集程度,也反映了寻找并验证大范围质数的计算挑战。 #### 三、质数的分布规律 1. **质数分布定理**...
标题 "50000000(五千万)以内质数(素数)3001134(约三百万)个.zip" 暗示了这个压缩包包含了一个文本文件,列出了从1到50,000,000之间所有约300万个质数。描述中的 "普通pc演算(i7处理器)" 表明这些质数是通过一台搭载...
求出100以内的素数,并将这些数在屏幕上5个一行的显示出来。
用javajava script求出一千以内的质数
回文质数是一种特殊的素数,它同时具备回文数的特性,即无论从左向右读还是从右向左读都是一样的数字。例如,11、121、1331等都是回文质数。在编程领域,求解一定范围内的回文质数是一项常见的算法挑战,这个挑战...
这个是用Java求100以内素数的一个小程序,希望大家多多指教,如想有更多的交流,请加我347152427
在IT领域,尤其是在编程与...综上所述,通过C++语言求解1000以内的所有素数及素数的个数不仅是一次编程实践,更是对算法理解和优化能力的一次锻炼。掌握并灵活运用不同的素数检测方法,对于提升算法设计水平大有裨益。
利用HTML+Javascript求指定范围的质数,含html控件实现,输入范围,得到该范围得质数
本篇文章将深入探讨如何使用C++编程语言来实现一个程序,找出1000以内的所有素数。 首先,我们需要理解C++的基础语法和控制结构。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也...
#### 三、求解100以内素数的算法实现 - **核心思路**: - 对于每个数`i`(从2到100),检查其是否为素数。 - 使用一个变量`jishu`记录是否找到因子,初始值设为1表示当前数可能是素数。 - 计算每个数的平方根`...
求200以内的所有素数的简单算法!很实用的求素数算法!
键盘输入n,判断n以内的素数,存入数组内输出。
(1)以十进制输出这些素数,每行 10 个,每输出一个素数都要有数秒的停顿。 (2)统计这些素数的个数,以十进制形式输出。 (3)计算这些素数之和,以十进制形式输出,并让该和闪烁 3 次。 (4)数据的输入和结果的...