`
xiaoer_1982
  • 浏览: 1882529 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

求一百以内的质数

 
阅读更多

#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的倍数的数字比较多,这样可以节省运算。

分享到:
评论

相关推荐

    求100以内的全部素数

    求XX以内的全部素数,代码已经过优化,效率高。

    求100以内的质数程序

    c++程序求100以内的质数,很简单的就是要会质数的函数就可以,赚点分数 希望和高手学习

    用python求100以内质数

    用python求100以内质数

    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 以内的素数

    求100 以内的素数。要求:1)以十进制输出这些素数,每行10 个,每输出一个素数都要有数秒的停顿;2)统计这些素数的个数,以十进制形式输出;3)计算这些素数之和,以十进制形式输出;4)数据的输入和结果的输出都要有必要的...

    一百以内偶数等于两个素数的求法(java)

    在一百以内且大于7的数字中,用两个素数表示一个偶数的java源代码。

    1000以内质数的输出

    1000以内的质数:&quot;+str ; }"&gt;public class Test public static void main String [] args { String str &quot;&quot;; for int i 1; i &lt; 1000; i++ { for a 2; a &lt; int i 2; a++ { if i % a 0 { ...

    1亿以内的质数(共5761455个数).txt_1亿以内素数的个数

    #### 二、1亿以内质数的数量 根据题目给出的信息,1亿以内的质数共有5,761,455个。这一数字不仅展示了质数分布的密集程度,也反映了寻找并验证大范围质数的计算挑战。 #### 三、质数的分布规律 1. **质数分布定理**...

    50000000(五千万)以内质数(素数)3001134(约三百万)个.zip

    标题 "50000000(五千万)以内质数(素数)3001134(约三百万)个.zip" 暗示了这个压缩包包含了一个文本文件,列出了从1到50,000,000之间所有约300万个质数。描述中的 "普通pc演算(i7处理器)" 表明这些质数是通过一台搭载...

    求出100以内的素数

    求出100以内的素数,并将这些数在屏幕上5个一行的显示出来。

    java script求出一千以内的质数

    用javajava script求出一千以内的质数

    算法-求一亿以内的回文质数(素数).rar

    回文质数是一种特殊的素数,它同时具备回文数的特性,即无论从左向右读还是从右向左读都是一样的数字。例如,11、121、1331等都是回文质数。在编程领域,求解一定范围内的回文质数是一项常见的算法挑战,这个挑战...

    Java 求100以内的素数

    这个是用Java求100以内素数的一个小程序,希望大家多多指教,如想有更多的交流,请加我347152427

    求出1000以内的素数及素数的个数

    在IT领域,尤其是在编程与...综上所述,通过C++语言求解1000以内的所有素数及素数的个数不仅是一次编程实践,更是对算法理解和优化能力的一次锻炼。掌握并灵活运用不同的素数检测方法,对于提升算法设计水平大有裨益。

    利用HTML+Javascript求指定范围的质数.html

    利用HTML+Javascript求指定范围的质数,含html控件实现,输入范围,得到该范围得质数

    求1000以内的素数

    本篇文章将深入探讨如何使用C++编程语言来实现一个程序,找出1000以内的所有素数。 首先,我们需要理解C++的基础语法和控制结构。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也...

    求100以内的素数

    #### 三、求解100以内素数的算法实现 - **核心思路**: - 对于每个数`i`(从2到100),检查其是否为素数。 - 使用一个变量`jishu`记录是否找到因子,初始值设为1表示当前数可能是素数。 - 计算每个数的平方根`...

    求200以内的所有素数的简单算法!

    求200以内的所有素数的简单算法!很实用的求素数算法!

    求n以内的素数并用数组存储

    键盘输入n,判断n以内的素数,存入数组内输出。

    求100以内素数(包含个数,求和)

    (1)以十进制输出这些素数,每行 10 个,每输出一个素数都要有数秒的停顿。 (2)统计这些素数的个数,以十进制形式输出。 (3)计算这些素数之和,以十进制形式输出,并让该和闪烁 3 次。 (4)数据的输入和结果的...

Global site tag (gtag.js) - Google Analytics