一道有趣的逻辑题

作者: 黄某 | 来源:发表于2018-04-21 01:22 被阅读360次

题目
有两个大于1的正数 x和y,甲知道二者的积,乙知道二者的和。
甲:我不知道这俩数是什么!
乙:我不知道这俩数是什么,我就知道你不知道!
甲:现在我知道了。
乙:现在我也知道了。

分析

首先我们需要将其简化为一个数学问题,即 从甲和乙的对话中筛选出一些条件。

  • 甲:我不知道这俩数是什么!
    从这句话,我们可以推导出,x 和 y 不同时为质数。(假设 x 和 y 同时为质数,甲就可以直接得出 x 和 y 的值)。
    *乙:我不知道这俩数是什么,我就知道你不知道!
    乙得知的是两数的和,这句话说明,把这个和做分解成两个数,没有任何一种分解可以使得两个数都是质数,不然乙无法肯定甲不知道这两个数是什么。
    *甲:现在我知道了。
    甲知道的是两个数的积,这句话说明,这个积分解成两个乘数时,有且仅有一组乘数的和,不能被拆分成两个质数相加的形式。
    *乙:现在我也知道了。
    在乙所知道的和的所有拆分中,有且仅有一组满足上述条件。

Talk is cheap,show me the code

以下为Java代码实现:

public class findExactNums {

static Map<Integer,String> exactNums = new HashMap();


public static void main(String[] args0){
   findExactNums();
}

//遍历所有数
public static void findExactNums(){
    for(int sum=4;;sum++){
        if(judgeCanSplitToPrime(sum)){
            continue;
        }
        int count=0;
        for(int x=2;x<sum/2+1;x++){
            if(judgeFactorSumCanSplitPrime(x*(sum-x))){
                count+=1;
                int y=sum-x;
                exactNums.put(sum,x+":"+y);
            }
        }
        if(count==1){
            System.out.println(exactNums.get(sum));
        }
    }



}

//判断积的所有因子中是否有且仅有一组因子的和不可分解为两质数
public static boolean judgeFactorSumCanSplitPrime(int product){
    int count=0;
    for(int i=2;i*i<=product;i++){
        if(product%i==0){
            if(!judgeCanSplitToPrime(i+product/i)){
               count+=1;
            }
        }
    }
    if(count==1){
        return true;
    }
    return false;
}

//判断是否能被分解为两个质数
public static boolean judgeCanSplitToPrime(int num){
    for(int i=2;i<num/2+1;i++){
        if(judgePrime(i)&&judgePrime(num-i)){
            return true;
        }
    }
    return false;
}

//判断是否为质数
public  static boolean judgePrime(int num){
    if(num==1){
        return false;
    }
    if(num==2||num==3){
        return true;
    }
    if(num%2==0){
        return false;
    }
    for(int i=3;i*i<=num;i=i+2){
        if(num%i==0){
            return false;
        }
    }
    return true;
}
}

相关文章

  • 有趣的一道真假推理题

    有趣的一道真假推理题 这是一道考研的逻辑练习题 ,大家尝试一下,看看能不能在两分钟内求解。 逻辑题最有趣的一点是即...

  • 一道有趣的逻辑题

    题目有两个大于1的正数 x和y,甲知道二者的积,乙知道二者的和。甲:我不知道这俩数是什么!乙:我不知道这俩数是什么...

  • 求疯狗数量问题的正确解释。

    无意中在网上看到一道很有趣的逻辑题。这个题曾经出现在面试中,但是发现网上关于这个题的解释都不完整或者不正确,所以我...

  • 有趣的逻辑题_01

    猜数字 1、C列出了11个可能的答案35、36、3842、45、4651、55、5761、622、C分别只告诉了A...

  • 各种有趣的逻辑题

    村民杀? 程序员腾讯面试,倒在警察抓小偷逻辑题上 两个保龄球测试从100楼丢下去 『超级头脑风暴』IBM面试题

  • 一道有趣的题

    有3个好朋友外出旅行,晚上到一家旅店住宿,一间3人房30元一晚,3人各交了10元钱给旅店老板。后来旅店老板...

  • 一道有趣的编程题

    日前跟朋友交流过一点关于promise的知识,想了一道题。看到的朋友不妨给个答案,当娱乐一下自我吧。

  • 一道有趣的js题

    今天看到一道js基础题 我觉得很有趣,它是这样写的: var d = 30;var c = d++ + ++d ...

  • line-based file processing No.3

    if-else 绕晕了的一道题 要把几种情况的不同逻辑先画图

  • 铁路笔试

    一、选择题 主要是以行测为主,我记得其中包括了逻辑题, 数量关系,历史题“有一道近代史的时间顺序排序题” 还有铁路...

网友评论

    本文标题:一道有趣的逻辑题

    本文链接:https://www.haomeiwen.com/subject/svstlftx.html