zoukankan      html  css  js  c++  java
  • ECNU 2877 歌德巴赫猜想

    ECNU 2877 歌德巴赫猜想

    链接

    https://acm.ecnu.edu.cn/problem/2877/

    题目

    单点时限: 4.0 sec

    内存限制: 256 MB

    歌德巴赫猜想,是指对于每一个大于 4 的偶数 ,都能表示成两个质数之和。

    现在,你需要写程序验证这一猜想。对于n,找出质数a和b, 满足a+b=n,a<=b,且 a * b 最大。
    例如n=8,满足条件的a和b分别为 3 和 5;

    输入格式
    每行一个偶数n(4 < n <= 20000)

    输出格式
    对应于每个输入的偶数,输出a、一个空格、b、一个换行符

    样例
    input
    8
    10
    1000
    output
    3 5
    5 5
    491 509

    思路

    思路不是很麻烦,就是找到和为n的两个素数,要求这两个素数积最大。
    如果两个数越接近,那么积就越大,这就可以从n/2往两边找,套一层循环即可,check函数用来检测是否是素数的。
    如果题目要求很高,可以先把素数打表存下来,就避免了check函数的反复运算。
    这题最开始我还runtime error,研究下才发现,我写的是while(true),难怪超时,改成hasNextInt()即可。

    代码

      public static boolean check(int n) {
        for (int i = 2; i <= n / 2; i++) {
          if (n % i == 0) {
            return false;
          }
        }
        return true;
      }
    
      public static void fun() {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
          int n;
          n = sc.nextInt();
          if (n > 20000 || n <= 4 || n % 2 != 0) {
            break;
          }
    
          for (int i = n / 2; i >= 1; i--) {
            if (check(i) && check(n - i)) {
              System.out.println(i + " " + (n - i));
              break;
            }
          }
        }
    
      }
    
  • 相关阅读:
    HDU5618 Jam's problem again
    BZOJ2002弹飞绵羊
    树剖模板
    点分治模板题
    c++ 读入优化、输出优化模板
    牛客网练习赛44-B(快速幂+模拟)
    poj2912(带权并查集+枚举)
    ucore-lab1-练习3report
    poj2492(带权并查集)
    poj1984(带权并查集)
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14261526.html
Copyright © 2011-2022 走看看