`
lin_llx
  • 浏览: 127279 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

C++模板编写的求前n个质数和程序

阅读更多

最近无聊,写了一个基于C++模板的求前n个质数的程序。

编译速度极其之慢。。

不过运行速度相当可以。

 

恩。如果C++的模板再多一点关键字的话,就可以看做是Lisp语言了。。

 

不过话说回来,引用一下老刘的话:

marchliu 写道
C++模板语法只差一步,只要加入类似Lisp关键字的一些东西,就可以让模板方便的控制编译过程了。
但是,在这之前,C++就已经太笨重了。
C++已经到了悬崖边上了,现在委员会决定再向前迈一步……

 

下面贴上代码做备忘:

 

#include <iostream>
template <int p, int i>
struct is_prime{
    enum {
        result = (p == 2) || (p % i) && is_prime<(i>2?p:0), i-1>::result
    };
};

template <>
struct is_prime<0, 0>{
    enum {
        result = 1
    };
};

template <>
struct is_prime<0, 1>{
    enum {
        result = 1
    };
};

template <>
struct is_prime<1, 0>{
    enum {
        result = 0
    };
};


template <int, int> struct If;
template <int> struct next_prime;

template <int i>
struct If<1, i>{
    enum {
        result = i
    };
};

template <int i>
struct If<0, i>{
    enum {
        result = next_prime<i>::result
    };
};

template <int i>
struct next_prime{
    enum {
        result = If<is_prime<i + 1, i>::result, i + 1>::result
    };
};

template <int i, int j>
struct loop{
    enum {
        result = loop<i - 1, next_prime<j>::result>::result + next_prime<j>::result
    };
};

template <>
struct loop<0, 2>{
    enum {
        result = 2
    };
};

template <int sum, int prime, int i>
struct num_of{
    enum {
        result = num_of<sum + next_prime<prime>::result, next_prime<prime>::result, i - 1>::result
    };
};

template <int sum, int prime>
struct num_of<sum, prime, 0>{
    enum {
        result = sum
    };
};

int main(){
    //std::cout << loop<10000>::result << std::endl;
    //std::cout << next_prime<3>::result << std::endl;
    std::cout << num_of<0, 0, 5>::result << std::endl;
    return 0;
}
 还是很晦涩啊。。
分享到:
评论
3 楼 lin_llx 2009-12-02  
NeuronR 写道
is_prime 里面的逻辑是个瓶颈; next_prime 每次 i=i+1, 很挫的说; 最后的 num_of 看起来好怪, 最好外面加个套, 有助于阅读.
奉上我的文章
http://www.taoyard.net.cn/?p=50


懒得搞了。。呵呵。。
2 楼 NeuronR 2009-12-02  
is_prime 里面的逻辑是个瓶颈; next_prime 每次 i=i+1, 很挫的说; 最后的 num_of 看起来好怪, 最好外面加个套, 有助于阅读.
奉上我的文章
http://www.taoyard.net.cn/?p=50
1 楼 NeuronR 2009-11-30  
路过, mark, 回头来看看.

相关推荐

    C++模板元编程技术与应用

    《C++模板元编程技术与应用》是一本深入探讨C++模板元编程的书籍,旨在让更多的C++程序员了解并掌握这一技术,从而在编程过程中提高效率和代码质量。模板元编程是C++中一种强大的静态编译时编程技术,它允许程序员在...

    C++模板元编程 ppt - 荣耀

    为了更好地理解C++模板元编程的核心概念和技术细节,下面通过一个具体的例子来展开讨论: ```cpp // 主模板 template&lt;int N&gt; struct Fib { enum { Result = Fib&lt;N - 1&gt;::Result + Fib&lt;N - 2&gt;::Result }; }; // ...

    [Tm] 001 C++ 模板.pdf

    文档中提及的代码片段,如最大公约数的模板实现、快速幂算法、扩展欧几里得算法、基本预处理和线性筛素数等,都是C++模板编程中具体的实现方法和技术细节。通过这些模板的实例化,可以生成适用于不同数据类型和需求...

    魏英C++MOOC讲义及程序代码

    - **求素数个数的类.exe**:与求素数个数的类源代码相对应的可执行程序,便于验证和调试代码。 2. 实践与应用: - 学习者可以逐一运行这些代码,观察程序输出,加深对C++语法和概念的理解。 - 通过修改和扩展...

    蓝桥杯国赛题之C++质数的后代.zip

    【标题】"蓝桥杯国赛题之C++质数的后代"涉及到的是一个编程竞赛中的问题,主要考察参赛者对C++编程语言的理解以及在算法设计上的能力,特别是关于质数及其特性的运用。蓝桥杯国赛是全国知名的编程竞赛,旨在提升大...

    C++元编程和Boost编程库

    总结来说,C++元编程和Boost编程库中的MPL是C++编程中非常强大的工具,它们利用了C++模板的特性,在编译阶段进行计算和代码生成,使得程序员能够在程序设计阶段就进行高度优化和抽象。这些技术的应用极大地丰富了C++...

    西北工业大学 C++程序设计 noj习题答案

    数值计算和数据处理是编程常见的任务,如级数和、方差、函数模板中的三个排序等,这些习题让学生掌握如何处理各种数学运算和数据结构。字符串处理也是C++中重要的一部分,题目中包含了字符串比较、字符串排序、字符...

    C\C++语言程序百例

    这个压缩包中包含的100个小程序旨在帮助学习者深入理解和掌握C语言及部分C++的基础知识,同时也涉及到了算法设计和问题解决策略。 1. **C和C++语言基础**:C和C++是两种密切相关的编程语言,C++是在C语言的基础上...

    C++学习线路图

    在“C++学习线路图”中,我们不仅探讨了C++的学习路径,还深入解析了算法的基础概念及其实现,尤其聚焦于计数、求和、求阶乘等简单算法,以及更复杂的求最大公约数、最小公倍数、判断素数和验证哥德巴赫猜想的算法。...

    完整的学习C++的读书路线图

    学习C++的过程是一个系统性的旅程,需要按照一定的顺序和路径进行。以下是一个推荐的C++学习路线图: 首先,从《C++ Primer》开始。这本书是C++初学者的入门经典,它详细介绍了C++的基础语法,包括变量、类型、控制...

    C/C++常用模板(—)

    5. **前n个素数乘积模一个很大很大的值** ```c++ #include using namespace std; int main() { int n, b, i = 4, j = 3; long long cj = 6; // 示例代码片段,实际实现略 } ``` 以上内容总结了C/C++...

    c++实验报告(4)面向对象

    通过这个实验,学生应该能够熟练地掌握C++的输入/输出操作,格式化输出的技巧,理解模板的概念和使用,以及文件操作的基本方法。同时,实验也锻炼了学生的编程能力和问题解决能力,特别是在面向对象编程的上下文中。

    c++初学者介绍

    2. **《C++标准程序库》**:在掌握了基本的C++语法后,了解C++的标准库是非常重要的,这包括对各种容器、算法和迭代器的理解与运用。 3. **《C++编程思想》**:这本书深入浅出地讲解了C++的设计原则和高级编程技术...

    04737C++程序设计试题及答案201704(扫描)[汇编].pdf

    2. 编写一个for循环,打印1到100之间的所有质数。 3. 设计一个嵌套循环,实现9x9乘法表的打印。 **三、函数** 函数是C++程序设计的基础模块,可以封装代码、提高复用性。试题可能涉及函数定义、调用、参数传递等:...

    C语言程序设计C标准模板库PPT课件.pptx

    C语言程序设计C标准模板库PPT课件涵盖了泛型程序设计、命名空间、容器、适配器、迭代器和算法等核心概念,这些都是C++编程中的重要组成部分。 泛型程序设计是C++中的一项重要特性,它允许编写不依赖于特定数据类型...

    C++语言程序设计:第10章 C++标准模版库.pptx

    在例10-1中,程序利用向量来存储和处理质数,显示了向量在动态存储数据方面的灵活性。 总的来说,C++标准模板库提供了一个强大的工具箱,使得C++程序员能够更高效地编写代码,同时保持代码的模块化和可重用性。通过...

    C++中采用模版类求质数

    我们可以创建一个模板函数,该函数接受一个整数N作为参数,然后找出并返回2到N之间所有的质数。为了实现这个功能,我们需要以下步骤: 1. **检查质数**:对于每个数字i从2到N,我们需要判断它是否为质数。一个简单...

Global site tag (gtag.js) - Google Analytics