哥德巴赫猜想(升级版)
https://www.luogu.com.cn/problem/P3912
本人所有文章都受版权保护,著作权归本人(Joseph_tony)所有,未经授权,禁止转载,若不得不转载,请注明原文网址链接!谢谢配合!
题目背景
1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和。质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3。需要特别说明的是1不是质数。
这就是哥德巴赫猜想。欧拉在回信中说,他相信这个猜想是正确的,但他不能证明。
从此,这道数学难题引起了几乎所有数学家的注意。哥德巴赫猜想由此成为数学皇冠上一颗可望不可及的“明珠”。
题目描述
现在请你编一个程序验证哥德巴赫猜想。
先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数。
输入格式
仅有一行,包含一个正奇数n,其中9<n<20000
输出格式
仅有一行,输出3个质数,这3个质数之和等于输入的奇数。相邻两个质数之间用一个空格隔开,最后一个质数后面没有空格。如果表示方法不唯一,请输出第一个质数最小的方案,如果第一个质数最小的方案不唯一,请输出第一个质数最小的同时,第二个质数最小的方案。
输入输出样例
输入 #1
2009
输出 #1
3 3 2003
int aiPrime(int n){//标记1~n范围内质数的状态 ,并返回质数个数//1. 初始化 默认所有数字状态为真memset(isPrime,?,sizeof(isPrime));//2. 特殊值进行处理isPrime[0]=isPrime[1]=?;//3. 遍历筛选//3.1 遍历2~nint cnt=0;//质数个数 for(int i=2;i<=n;i++){//3.2 改变所有质数倍数的状态if(isPrime[i]){//i是质数 cnt++;//将质数i的倍数(i*j)状态修改为falsefor(int j=2;?;j++){isPrime[?]=?;}} }return cnt;
}
//埃式筛的基本方式
下方代码用时较长(1.9s),质数判断的函数,枚举进入数组,最后输出即可
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int n;
int a,b,c;
bool isPrime[200005]={0};int aiPrime(int n)
{memset(isPrime,?,sizeof(isPrime));isPrime[0]=isPrime[1]=?;for(int i=2;i<=n;i++){if(isPrime[i]){for(int j=2;?;j++){isPrime[?]=?;}}}
}int main()
{cin>>n;aiPrime(n);for(int i=2;i<n-2;i++){for(int j=i;j<n-2;j++){for(int k=j;k<n-2;k++){if(?){cout<<i<<" "<<j<<" "<<k;return 0;}}}}return 0;
}
下方代码经过优化,只需33ms,你值得拥有
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int n;
int a,b,c;
bool isPrime[200005]={0};int aiPrime(int n)
{memset(isPrime,?,sizeof(isPrime));isPrime[0]=isPrime[1]=?;for(int i=2;i<=n;i++){if(isPrime[i]){for(int j=2;?;j++){isPrime[?]=?;}}}
}int main()
{cin>>n;aiPrime(n);for(int i=2;i<n-2;i++){for(int j=?;j<n-2;j++){int k=?;if(?){if(?){cout<<i<<" "<<j<<" "<<k;return 0;}}}}return 0;
}
本人所有文章都受版权保护,著作权归本人(Joseph_tony)所有,未经授权,禁止转载,若不得不转载,请注明原文网址链接!谢谢配合!
哥德巴赫猜想(升级版)相关推荐
- 【筛素数】P1579 哥德巴赫猜想(升级版)
https://www.luogu.com.cn/problem/P1579 考点:埃拉托斯特尼筛法 / 欧拉筛法 题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想: ...
- 哥德巴赫猜想(升级版)(洛谷-P1579)
题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是 ...
- P1579 哥德巴赫猜想(升级版)
题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是 ...
- c语言表示哥德巴赫猜想,用C语言来验证哥德巴赫猜想(定义的是int型)
哥德巴赫猜想: 如果任意一个大于6的偶数都可以写成两个素数之和.就将其称为符合哥德巴赫猜想. #include #include /// /// 判断一个数是否是素数 /// /// 要判断的数 // ...
- 学术-数学:哥德巴赫猜想
ylbtech-学术-数学:哥德巴赫猜想 哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和.但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮 ...
- 用跑得最慢的电脑程序,理解最高深的哥德巴赫猜想
五条规则的图灵机可视化.每列像素代表一步计算,步骤从左到右.黑色代表1.最右边表示图灵机的停机.(图片来源:Peter Krumins/Quanta Magazine) 文章来源:环球科学 " ...
- 100c之31:哥德巴赫猜想
Table of Contents 1 问题 2 分析 3 解决方案 4 输出结果 问题 哥德巴赫猜想:验证2000以内的正偶数都能分解为两个素数之和( 即验证哥德巴赫猜想对2000以内的正偶数成立 ...
- 验证哥德巴赫猜想c语言算法,验证哥德巴赫猜想的简单优化
哥德巴赫猜想:任意一个大于2的偶数,都可以表示为两个素数之和. 验证:2000以内,大于2的偶数,都可以分解为两个素数之和. 分析:2000以内,大于2的偶数为999个,需要逐个判断. 判断过程:对于 ...
- 实验4-2-3 pta验证“哥德巴赫猜想” (20分)
验证"哥德巴赫猜想" (20分) 数学领域著名的"哥德巴赫猜想"的大致意思是:任何一个大于2的偶数总能表示为两个素数之和.比如:24=5+19,其中5和19都是 ...
最新文章
- 简单介绍自动化运维工具clip
- [Leetcode] Simplify Path
- 98.512X4位的芯片,要怎么组成4K的存储空间要用多少个芯片级联?具体用多少引脚?
- Matlab实用程序--图形应用-图形的叠加
- C++new和delete运算符
- Google 翻译,梦想与现实的距离有多远
- 提速 30%!腾讯TQUIC 网络传输协议
- C/C++编程心得(三)
- 使用HTML编写简单的邮件模版
- 数学建模之相关性分析1
- 节假日查询API接口上线
- unity 模型销毁_Unity中销毁游戏对象的方式
- SAP中汇率固定配置和应用分析测试
- 309.Best Time to Buy and Sell Stock with Cooldown
- python怎么输出所有奇数_python输出100以内奇数的几种输出方式-Go语言中文社区
- 《了不起的盖茨比》中体现的人生观、价值观、爱情观
- Ajax回调函数无反应及进erro问题记录。
- 前尘浮华一场梦 NOI2018 游记
- html无法展示swf,flexpaper无法预览swf文件_html/css_WEB-ITnose
- visual studio控制台中文乱码问题