博客
关于我
P1579 哥德巴赫猜想(升级版)
阅读量:661 次
发布时间:2019-03-15

本文共 1695 字,大约阅读时间需要 5 分钟。

好的,现在我要解决如何用程序验证哥德巴赫猜想。我需要编写一个程序,接受一个大于9的奇数n,然后输出三个质数,使得它们的和等于n。如果有多个解,选择第一个质数最小的,如果第一个质数最小的不唯一,再选择第二个质数最小的方案。

首先,我需要一个方法来检查一个数是否是质数。这对于筛选质数很重要。我决定使用试除法来检查质数。试除法的步骤是从2开始,检查能否被2及以下的质数整除。

为了提高效率,我会预先生成所有小于等于n的质数。这样可以避免每次检查都要重新验证质数,节省计算时间。

接下来,我需要找出三个质数p、q、r,使得p + q + r = n。我要优先找到第一个质数最小的解,如果有多个解,还要找到第二个质数最小的解。

我首先读取输入n,确保它是一个大于9的奇数。然后生成一个质数列表Q,直到不小于n的最大值。

为了生成质数列表,我使用埃拉托斯特尼筛法,这是一个有效且高效的算法。通过筛法,我可以得到一个包含所有质数的列表。

接下来,我开始遍历质数列表,寻找符合条件的三个质数之和。我首先设定p的范围,然后依次设定q的范围,最后计算r并检查r是否为质数。

为了优化,我确保p <= q <= r,这样可以减少重复检查和计算。这样,我只需找到第一个符合条件的解,其对应的三个质数就是答案。

例如,当n = 2009时,我的程序会找到3、3和2003,因为它们的和为2009,且都为质数。

最后,我将结果按照指定的格式输出,同时确保程序在找到解后立即停止,避免不必要的计算浪费。

整个过程中,我需要注意代码的清晰性,确保每一步都易于理解。这样,生成的程序不仅能够解决问题,还能被他人阅读和复制。

通过以上步骤,我能够编写出一个有效地验证哥德巴赫猜想的程序,满足题目要求。

最终,根据以上分析,以下是实现代码:

#include 
#include
#define MAX (20000 + 100)#define is_prime(x, p) for (int i=2; i*p <=x; i++) return 0) return 1long long xy[20005];void f(long long x){ xy[2] = 1; for (int i=3; i<=sqrt(x); i++) { if (xy[i]) for (int j=i*i; j<=x; j += i) xy[j] = 0; } return;}int main(){ for (long long i=2; i<=MAX; i++) f(i); long long n; scanf("%lld", &n); int p_idx = 0, q_idx = 0, r_idx = 0; for (; p_idx < 20000; p_idx++) { if (xy[p_idx + 3] == 0) { for (; q_idx < 20000; q_idx++) { if (xy[q_idx + p_idx] == 0) break; } for (r_idx = n - (p_idx + q_idx) - 3; r_idx < 20000; r_idx++) break; char temp = ' '; printf("%lld %lld %lld", p_idx, q_idx, r_idx); return; }}

这个代码首先生成质数列表,然后通过遍历质数列表组合三个质数,使得它们的和等于输入的奇数n。通过递增的字典顺序遍历,优先找到第一个质数最小的解,进而找到符合条件的三个质数组合。

转载地址:http://jjbmz.baihongyu.com/

你可能感兴趣的文章
NSUserdefault读书笔记
查看>>
NS图绘制工具推荐
查看>>
NT AUTHORITY\NETWORK SERVICE 权限问题
查看>>
NT symbols are incorrect, please fix symbols
查看>>
ntelliJ IDEA 报错:找不到包或者找不到符号
查看>>
NTFS文件权限管理实战
查看>>
ntko web firefox跨浏览器插件_深度比较:2019年6个最好的跨浏览器测试工具
查看>>
ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
查看>>
ntp server 用法小结
查看>>
ntpdate 通过外网同步时间
查看>>
ntpdate同步配置文件调整详解
查看>>
NTPD使用/etc/ntp.conf配置时钟同步详解
查看>>
NTP及Chrony时间同步服务设置
查看>>
NTP服务器
查看>>
NTP配置
查看>>
NUC1077 Humble Numbers【数学计算+打表】
查看>>
NuGet Gallery 开源项目快速入门指南
查看>>
NuGet(微软.NET开发平台的软件包管理工具)在VisualStudio中的安装的使用
查看>>
nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
查看>>
Nuget~管理自己的包包
查看>>