ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【思特奇杯·云上蓝桥-算法集训营】第1周 哥德巴赫猜想 java

2022-01-06 18:31:20  阅读:135  来源: 互联网

标签:arr 集训营 10000 int 质数 蓝桥 ++ 100 云上


题目原题:
在这里插入图片描述

题目解析:
感觉自己的脑子锈到了,这题看了一个多小时,才想出这题讲的到地是什么。题目中给的数代表的是一个范围,像100,是指的是100之内的所有偶数,都用两个质数的相加,而且这两个质数中的其中一个质数一定是能够加到这个偶数的最小的质数。
像题目给的案例:100之内的偶数一共有50个,像100被分解为:3和97.其中3,97都为质数且能加到100的最小的质数没有能比3更小的。如果写成2和98,98不是质数,排除。然后就是一次往下写,98为19和79,96为17和89,一只往下写,然后把每一个偶数的最小的质数都给提出来,然后找到其中最大的数,就是本题的答案。

解题代码:

package Test.Test_2017;

import java.util.Arrays;

public class 哥德巴赫分解 {
    static int[] arr = new int[2288];
    public static void main(String[] args) {
        int[] x=new int[5000];
        int a=0,b=0;
        int max=0;
        //把10000之内的所有质数都写出来,放在一个数组中
        for (int i = 2; i < 10000; i++) {
            boolean bool =true;
            for (int j = 2; j <i; j++) {
                if(i%j==0)
                {
                    bool=false;
                    break;
                }
            }
            if(bool){
                arr[b++]=i;
            }
        }
        System.out.println(Arrays.toString(arr));
        for (int i = 10000; i >0 ; i-=2) {
            for (int j = i; j >0 ; j--) {
                if(zhishu(j))
                {
                    int t=i-j;
                    if(zhishu(t))
                    {                        
                            x[a++]=t;
                            break;                     
                    }
                }
            }
        }
        for (int i = 0; i < x.length; i++) {

            if(x[i]>max)
            {
                max=x[i];
            }
        }
        System.out.println(max);
    }
    public static boolean zhishu(int n)
    {
        for (int i = 0; i < arr.length; i++) {
            if(n==arr[i])
            {
                return true;
            }
        }
        return false;
    }
}

题目答案:
在这里插入图片描述
反思:
关于那个质数,大家一定要好好求,按照标准公式,千万不可以想我这样写:***这样写是错的,不对的***千万不能为了图省事而这样写,否则坑的还是自己。

//        int n = 4, p = 4;
//        System.out.println(Arrays.toString(arr));
//        for (int i = 10; i < 10000; i++) {
//            if (((i % 2) != 0) && ((i % 3) != 0) && ((i % 5) != 0) && ((i % 7) != 0)) {
//                n++;
//                for (int j = p; j < n; j++) {
//                    arr[j] = i;
//                }
//                p++;
//            }
//        }
//        arr[0]=2;arr[1]=3;arr[2]=5;arr[3]=7;

标签:arr,集训营,10000,int,质数,蓝桥,++,100,云上
来源: https://blog.csdn.net/GX_666/article/details/122348772

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有