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

    题目背景 Background
    1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和。质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3。需要特别说明的是1不是质数。 这就是哥德巴赫猜想。欧拉在回信中说,他相信这个猜想是正确的,但他不能证明。 从此,这道数学难题引起了几乎所有数学家的注意。哥德巴赫猜想由此成为数学皇冠上一颗可望不可及的“明珠”。
     题目描述 Description
    现在请你编一个程序验证哥德巴赫猜想。
        先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数。
     输入输出格式 Input/output
    输入格式:
    仅有一行,包含一个正奇数n,其中9<n<20000
    输出格式:
    仅有一行,输出3个质数,这3个质数之和等于输入的奇数。相邻两个质数之间用一个空格隔开,最后一个质数后面没有空格。如果表示方法不唯一,请输出第一个数最小的方案,如果第一个数最小的方案不唯一,请输出第二个数最小的方案。
     输入输出样例 Sample input/output
    样例测试点#1
    输入样例:
    2009
    输出样例:
    3 3 2003
    思路:先从小到大,寻找第一个质数,找到了,从这个质数开始寻找第二个质数,找到的话,直接输出即可(第三个数就是n-i-j)
    代码如下:
     1 #include <stdio.h>    
     2 #include <math.h>     
     3 int pri(int a)  //判断质数
     4 {    
     5     for(int i=2;i<=sqrt(a);i++)
     6     {
     7         if(a%i==0) return 1;//找到了,返回1    
     8     }    
     9     return 0;//否则返回0    
    10 }    
    11 int main()    
    12 {    
    13     int n,a,b,c;    
    14     scanf("%d",&n);   
    15     for(int i=2;i<n;i++)//找到第一个数  
    16     {    
    17         if(pri(i)==0) 
    18         for(int j=2;j<n-i;j++)//判断第一个数是否为质数,如果是,寻找第二个数  
    19         {    
    20             if(pri(j)==0&&pri(n-i-j)==0) //找到2个数自然确定了第三个数 ,并判断第二和第三个数为质数 
    21             {
    22                 printf("%d %d %d
    ",i,j,n-i-j);
    23                 return 0;
    24             }    
    25         }    
    26     }    
    27 }
  • 相关阅读:
    MongoDB 4.0.10 CRUD操作(增删改查)
    MongoDB 4.0.10 聚合
    MongoDB 4.0.10 索引
    MongoDB 4.0.10 导出、导入,备份、恢复
    MongoDB 4.0.10 监控
    列及注释
    SecureCRT的shell中文乱码
    oracle 判断是否是日期
    查询oracle服务器的版本
    Oracle中connect by 的执行结果记载
  • 原文地址:https://www.cnblogs.com/geek-007/p/4471273.html
Copyright © 2011-2022 走看看