zoukankan      html  css  js  c++  java
  • 一本通1157 哥德巴赫猜想

    【题目描述】

    哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6~100所有偶数表示成两个素数之和。

    【输入】

    (无)

    【输出】

    分行输出:

    例如:

    6=3+3

    8=3+5

    ...

    (每个数只拆开一次,请保证第一个加数最小)


    1.看到题首先想到的是循环,从六开始for然后到100终止,应该也不难实现,但是毕竟刚学了函数,所以考虑一下用函数怎么做(其实里面还要用循环的哈)。

    2.话说计算计算多少遍都不累的,所以每个数都让计算机拆成一到它本身之间的所有数就行了,这里用两个毫不相干的变量(x,y)来实现的话,会算一万次(100*100),简化一下。

       设现在在算的这个数叫A吧,则可以用X和A-X来实现循环。

    3.现在已经拆好了这两个数了,考虑一下怎么用函数判断这两个数是质数。

    (1)首先比较麻烦的一种是从一到这个数试除,没有能整除的就是质数了,如此往复两遍并用&&连接起来,用布朗判断一下。但好像比较难实现哈......

    (2)另一种是取这个数平方根的向下取整,然后从一到这个数试除,没有能整除的就是质数了,如此往复两遍再用&&连接起来,用布朗判断一下。

    4.最后把这两个数按格式加上运算符输出就行了,不难操作。

    5.题解

    #include<iostream>
    #include<cmath>
    using namespace std;
    bool gdbh(int x);
    int main()
    {
        int x;
        int i;
        for(x=6; x<=100; x+=2) //枚举6-100的偶数
            for(i=2; i<=x/2; i++) //将x分解为i与x-i两个数
                if(gdbh(i)&&gdbh(x-i))//若被分解的两个数皆为素数
                {
                 cout<<x<<"="<<i<<"+"<<x-i<<endl;//输出
                 break;//终止循环
                }
        return 0;
    } 
    bool gdbf(int x)//判断素数
    {
        int i=2;
        while( i<=floor(sqrt(x)) && (x%i!=0) )
            i++;
        if(i>floor(sqrt(x)))
            return true;
        return false;
    }

    嗯对就是这样。

    6.又到了喜闻乐见的总结时间了:

       其实选这个题来写的时候,想的是想看看C++自带的函数语句中有没有判断素数的,正好可以引用一下,借此说明“函数懂得多,做题更简单”的道理。

       最后查了度娘才发现根本没有......

       这题也是个比较正常的函数+循环的题,

       这种题一般也可以直接用循环做,

       有些特殊的也可以打表(比如这个,比较难哈......)或者用C++自带的特殊函数做。

  • 相关阅读:
    前端开发笔记(2)css基础(上)
    前端开发笔记(1)html基础
    <Android 基础(三 十)> Fragment (3) ~ PreferenceFragment
    MyEclipse中搭建Struts2开发环境
    Android 投射工具和录屏工具
    似是而非的k=sqrt(n)
    算法:求比指定数大且最小的“不重复数”问题的高效实现
    巧用“异或”
    12个滑稽的C语言面试问答——《12个有趣的C语言问答》评析(5)
    12个滑稽的C语言面试问答——《12个有趣的C语言问答》评析(4)
  • 原文地址:https://www.cnblogs.com/Jiangxingchen/p/12236767.html
Copyright © 2011-2022 走看看