zoukankan      html  css  js  c++  java
  • P1579 哥德巴赫猜想(升级版)

    题目背景

    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


    //P1579 哥德巴赫猜想(升级版)
    // 打表就行啦
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    // 筛选法求素数
    #define MAX_N 30001
    bool prime[MAX_N];
    int temp[MAX_N];
    int cnt = 0;
    void setPrime() {
    	memset(prime, 1, sizeof(::prime));
    	::prime[0] = ::prime[1] = false;
    	for (int i = 2; i < MAX_N; i++) {
    		if (prime[i] == true) {
    			temp[cnt++] = i;
    		}
    		for (int j = 0; j < cnt && i*temp[j] < MAX_N; j++) {
    			prime[i*temp[j]] = false;
    			if (i%temp[j] == 0) break;
    		}
    	}
    }
    
    int main() {
    	int n;
    	setPrime();
    	cin >> n;
    	if (n % 2 == 0)
    		return 0;
    	if (n < 9 || n>20000) {
    		return 0;
    	}
    	//11 2 2 7
    	for (int i = 2; i < MAX_N; i+=2) {
    		for (int j = 2; j < MAX_N; j+=2) {
    			for (int k = 2; k < MAX_N; k+=2) {
    				if (prime[i] && prime[j] && prime[k]) {
    					if (i + j + k == n) {
    						cout << i << " " << j << " " << k << endl;
    						return 0;
    					}
    					k = k == 2 ? 1 : k;
    				}
    			}
    			j = j == 2 ? 1 : j;
    		}
    		i = i == 2 ? 1 : i;
    	}
    	return 0;
    }
    

    无难度,签到题

  • 相关阅读:
    什么样的代码称得上是好代码?
    九年程序人生 总结分享
    Docker入门 第一课 --.Net Core 使用Docker全程记录
    阿里云 Windows Server 2012 r2 部署asp.net mvc网站 平坑之旅
    Visual studio 2015 Community 安装过程中遇到问题的终极解决
    Activiti6.0 spring5 工作流引擎 java SSM流程审批 项目框架
    java 进销存 库存管理 销售报表 商户管理 springmvc SSM crm 项目
    Leetcode名企之路
    24. 两两交换链表中的节点
    21. 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537725.html
Copyright © 2011-2022 走看看