数据与算法——哥德巴赫数

本文介绍了作者在数据与算法课程中解决哥德巴赫数问题的过程,探讨了如何寻找质数并优化算法以避免重复筛除。通过C++编程实现,分别给出初始版本和改进版代码,旨在提升编程思考与算法理解。
摘要由CSDN通过智能技术生成

经过了大一学年C和C++的接触和学习,进入大二后,学校安排的课程便对编程能力提出了更高的要求。这学期开设的数据与算法的课程,内容涵盖了数据结构和算法两大方面。为了能从本学期的编程中整理出更多的思路、算法和注意事项,我将特意抽取时间对每次编程的思路及优化加以总结。毕竟只是一名普通的大二学生,因而我在算法肯定不是最优,只是按照自己思考和理解,加上一点点技巧。另外自己在内存的利用上也欠佳。但相信整理一下编程的过程,肯定还是比糊里糊涂、已通过测试为目的的编程要有更大的收获。所以,特开设此博客。还麻烦各路大神有时间的继续优化,共同努力寻找到更好的算法。

 

      

【数据与算法】之哥德巴赫数问题

【问题】哥德巴赫数

[Description]

定义哥德巴赫数为可以表示为两个质数之和的数。给定正整数N,找出第N个歌德巴赫数。约定1不是质数。

[InputDescription]

一个正整数N,不超过10^7。

[OutputDescription]

第N个哥德巴赫数。

[Input Sample]

6

[Output Sample]

9

 

Time Limit :  1000 ms     Memory Limit :  40000 KiB   

 

 

【分析问题】

【哥德巴赫猜想】任意一个大于2的偶数都可以写成两个质数之和。

本题目设置在哥德巴赫猜想之上。这一猜想在纯数学理论层面上还没有完全被证出。(即使有不少人声称自己已经证出,但数学界仍没有统一的结论。)不过从计算机科学方面,目前所有的测试结果显示,并没有找到任何不符合哥德巴赫猜想的情况。因而,这道题的重点之一就是默认哥德巴赫猜想是成立的(至少在目前计算机可及的范围内正确)。因此,所有大于2的偶数都是哥德巴赫数。

除此之外,我们意识到质数分为2和奇质数。两个奇质数之和必定为偶数,所以包括在第一类哥德巴赫猜想之中。另外就是一个质数为2,另一个质数为奇质数。这样的书也哥德巴赫数。

所以,经过分析,我们可以得出,所要寻找的哥德巴赫数分为两大类:

①  所有大于2的偶数;

②  2+任一奇质数。

找偶数没有难度,所以关键问题在于奇质数的寻找。网上有很多筛法,都是从古至今不少智慧者寻找到的绝佳方法。但因为我是在编程的初始阶段,还是应该以个人思考为重点;前人的方法一定很厉害,不过可以留到日后继续学习,目前阶段需要的是自己的思考。于是我没有过多的上网寻找找质数的方法。

 

【解决问题】

       经过分析,问题的关键在于寻找质数(奇质数)。我采用的是小时候老师讲质数时用到的方法,说高端一些也是一种筛法。主要思路是,在一个数组中,将2的倍数、3的倍数、5的倍数、7的倍数、11的倍数等等全部“筛去”,最后剩下的就是质数(因为不是2、3、5、7等数的倍数)。

       在实现过程中,需要优化和加以确认的有:

①关于数组类型的选择:

       这道题目设定了输入的数字N不超过10^7,以10^7作为最坏情况。如果选用int型数组存储这10^7个整型,则光是存储就需要10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值