博客
关于我
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/

你可能感兴趣的文章
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
Nim教程【十二】
查看>>
Nim游戏
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO基于UDP协议的网络编程
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>